从 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)