从 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
>
}
let super_age = 1;
html!{
<JapaneseYew
age={super_age} // Correct
>
}
已添加速记初始化
let age = 1;
html!{
<JapaneseYew
{age}
>
}
有一个社区提供的正则表达式来帮助自动执行更新,但我们不能保证它始终有效。
它在遇到闭包(特别是|_|
语法)时会中断。
用=(?![{">=\s])([^\s></]*(\s!{0,1}[=|&]{2}\s[^\s></]*)*)
查找
用={$1}
替换
函数组件
函数组件是一种全新的编写组件的方法,与结构性组件相比,它需要的样板代码更少。
虽然此更改不会强制你更改代码库,但当你从0.18
迁移到0.19
时,此迁移时间可能是一个在代码库中开始使用它们的良好机会。
结构组件生命周期方法和 ctx
结构组件的 API 也进行了更改。
ShouldRender 已被 bool 移除
ShouldRender
已被 bool
移除,可以在整个代码库中找到并替换所有内容。
ctx、props、link
结构组件不再拥有 props 和 link,而是它们在生命周期方法中接收 ctx: &Context<Self>
参数,该参数稍后可以让你访问 ctx.props() -> &Properties
和 ctx.link() -> &Scope<Self>
。
你需要从组件结构字段中删除 link
和 props
,因为所有生命周期方法都已更新。
Component 特性中的生命周期方法
有关新 API 的信息,请参阅 Component 特性
web-sys
不再重新导出
将 web-sys
添加为项目依赖项,并逐个添加所需的特性,如 Event
或 Window
。
服务
在此更新期间,所有服务都被移除,取而代之的是社区驱动的解决方案,如 gloo
完全删除此内容。yew-services
添加了一层抽象,这使得调用外部资源变得更加容易。这很好,但此层应该特定于 Yew。如果存在一个与框架无关的抽象,那就更好了。
ConsoleService
改用 gloo-console 或weblog
。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} />
}
ResizeService
改用gloo-events
来附加侦听器。StorageService
改用gloo-storage
。TimeoutService
改用gloo-timers
。WebSocketService
改用wasm-sockets
或gloo-net
。FetchService
改用reqwest
或gloo-net
。
新包 - yew-agent
Yew 代理已移至一个单独的包,请参阅 yew 代理迁移指南
结束语
如果本指南中未涵盖某些内容,我们深表歉意,因为这确实是一次巨大的更新,我们希望未涵盖的问题将在 Rust 编译器发出的错误消息中得到明确解释。