從 0.19.0 至 0.20.0
移除 _as_body
start_app
變數
這種控制本體的方法已造成事件註冊和 SSR 補充資料的問題。它們已被移除。請在 github 問題 中閱讀更多資訊。
新的 Hooks 和函式元件 API
正在以不同的機制重新實作函式元件和 Hook API
- 現在需要使用者定義的 Hook 含有前綴
use_
,且必須標記為#[hook]
屬性。 - 如果掛勾並非從功能元件或使用者定義掛勾的最上層呼叫,現在會報告編譯錯誤。此限制也存在於 Yew 的先前版本中。在此版本中,此限制會報告為編譯時間錯誤。
自動訊息批次處理
排程器現在會將其開始排程至瀏覽器事件迴圈的尾端。在此期間排定的所有訊息將以批次方式執行。元件之間訊息的執行動作順序不再有保證,但傳送至同一元件的訊息仍以先進先出的順序確認。如果多項更新會導致渲染,元件將只會渲染一次。
對開發人員來說,代表什麼意義?
對於結構元件,這表示如果您傳送 2 則訊息至 2 個不同的元件,則無法保證它們會按照傳送順序顯示。如果您傳送 2 則訊息至同一個元件,這些訊息仍會按照傳送順序傳遞給該元件。這些訊息並不會立即傳送至元件,因此您不應假設元件收到訊息時,它仍維持訊息建立時的狀態。
對於功能元件,如果您使用 use_state(_eq)
儲存狀態,且該狀態的新值取決於前一個值,您可能想切換至 use_reducer(_eq)
。只有在元件下次渲染時,才能察覺到或確認狀態的新值。簡化程序動作類似於結構元件的訊息,並且會按照排出的順序傳送至簡化程序函式。簡化程序函式可以在執行時查看所有前一個變更。
Yew 渲染器
start_app*
已改由 yew::Renderer
取代。
您需要啟用功能 csr
才能使用 yew::Renderer
。
元件的 ref
prop
元件不再有 ref
prop。嘗試新增節點 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)