跳至主要内容
版本:0.21

从 0.19.0 到 0.20.0

_as_body 变体的 start_app 已移除

这种控制正文的方法在事件注册和 SSR 补水中造成了问题。它们已被移除。在 github issue 中阅读更多内容。

新的 Hooks 和函数组件 API

函数组件和 Hooks API 已使用不同的机制重新实现

  • 现在要求用户定义的 hooks 具有前缀 use_,并且必须用 #[hook] 属性标记。
  • 如果未从函数组件或用户定义的 hook 的顶层调用 hooks,则现在将报告编译错误。该限制也存在于 Yew 的先前版本中。在此版本中,它作为编译时错误报告。

自动消息批处理

调度程序现在将开始调度到浏览器事件循环的末尾。在此期间排队的全部消息将按批处理运行。组件之间的消息运行顺序不再得到保证,但发送到同一组件的消息仍按先进先出顺序确认。如果多个更新会导致渲染,则组件将被渲染一次。

这对开发者意味着什么?

对于结构组件,这意味着如果你向 2 个不同的组件发送 2 条消息,则无法保证按发送顺序查看这些消息。如果你向同一组件发送 2 条消息,则仍会按发送顺序将这些消息传递给组件。消息不会立即发送到组件,因此你不应假设当组件收到一条消息时,它在消息创建时仍具有相同的状态。

对于函数组件,如果你使用 use_state(_eq) 存储状态,并且该状态的新值取决于前一个值,则可能需要切换到 use_reducer(_eq)。状态的新值在下次渲染组件之前不会可见/确认。reducer 操作类似于结构组件的消息,并且将按分派顺序发送到 reducer 函数。reducer 函数可以在运行时查看所有先前的更改。

Yew 渲染器

start_app* 已被 yew::Renderer 替换。

你需要启用功能 csr 才能使用 yew::Renderer

组件的 ref 属性

组件不再具有 ref 属性。尝试向组件添加节点引用会导致编译错误

以前传递给组件的节点引用绑定到它渲染的第一个元素。如果仍需要此行为,建议向组件的属性添加 r#ref 字段并手动绑定它

组件上的 changed 方法

方法 fn changed() 现在有一个新参数,用于向函数提供旧属性。

旧方法的签名为

fn changed(&mut self, ctx: &Context<Self>) -> bool

新方法的签名现在为

fn changed(&mut self, ctx: &Context<Self>, old_props: &Self::Properties) -> bool

可以使用此 bash 脚本在你的代码中自动调整此项(运行此脚本前保存你的代码!)

perl -p -i -e  's/fn changed\(&mut self, (\w+): &Context<Self>\)/fn changed(&mut self, $1: &Context<Self>, _old_props: &Self::Properties)/g' $(find . -name \*.rs)