跳至主要内容
版本:0.21

从 0.18.0 到 0.19.0

Yew 0.19.0 已发生很大变化,因此本迁移指南不会涵盖所有更改。

相反,仅提及影响最大的更改,其余更改应由 cargo 拾取。

html! 要求大多数属性周围有花括号

html! 宏的语法已更新,在大多数情况下,您需要用花括号括起属性。

let super_age = 1;
html!{
<JapaneseYew
age=super_age // ! Will throw an error
>
}

有一个社区提供的正则表达式来帮助自动执行更新,但我们不能保证它始终有效。

它在遇到闭包(特别是|_|语法)时会中断。

=(?![{">=\s])([^\s></]*(\s!{0,1}[=|&]{2}\s[^\s></]*)*)查找

={$1}替换

函数组件

函数组件是一种全新的编写组件的方法,与结构性组件相比,它需要的样板代码更少。

虽然此更改不会强制你更改代码库,但当你从0.18迁移到0.19时,此迁移时间可能是一个在代码库中开始使用它们的良好机会。

结构组件生命周期方法和 ctx

结构组件的 API 也进行了更改。

ShouldRender 已被 bool 移除

ShouldRender 已被 bool 移除,可以在整个代码库中找到并替换所有内容。

结构组件不再拥有 props 和 link,而是它们在生命周期方法中接收 ctx: &Context<Self> 参数,该参数稍后可以让你访问 ctx.props() -> &Propertiesctx.link() -> &Scope<Self>

你需要从组件结构字段中删除 linkprops,因为所有生命周期方法都已更新。

Component 特性中的生命周期方法

有关新 API 的信息,请参阅 Component 特性

web-sys 不再重新导出

web-sys 添加为项目依赖项,并逐个添加所需的特性,如 EventWindow

服务

在此更新期间,所有服务都被移除,取而代之的是社区驱动的解决方案,如 gloo

完全删除此内容。yew-services 添加了一层抽象,这使得调用外部资源变得更加容易。这很好,但此层应该特定于 Yew。如果存在一个与框架无关的抽象,那就更好了。

  • ConsoleService 改用 gloo-consoleweblog
  • DialogService 改用 gloo-dialogs
  • IntervalService 改用 gloo-timers
  • KeyboardService yew 中的 on* 事件处理程序已经处理了它。使用此服务更加麻烦,因为它需要使用 NodeRef 才能调用它提供的任何函数。
let onkeydown = Callback::from(|e| {
e.prevent_default();
todo!("use `e`, just like in service methods.");
});
html! {
<input {onkeydown} />
}

新包 - yew-agent

Yew 代理已移至一个单独的包,请参阅 yew 代理迁移指南

结束语

如果本指南中未涵盖某些内容,我们深表歉意,因为这确实是一次巨大的更新,我们希望未涵盖的问题将在 Rust 编译器发出的错误消息中得到明确解释。