【不完全翻譯系列】
有些時候vue的響應機制並不起作用(注:vue官網文件 注意事項),這個時候我們需要強制vue元件重新渲染,也或許你可以刪掉當前的元件重新建立乙個新元件。所以,如何才能正確地讓元件重新渲染?
最好的方法是給元件設定 :key ,當你需要元件重新渲染時,只需要更改key的值。
除了用key外,用的比較多的還有另外兩種方法:
用v-if
用元件的forceupdate方法
v-if
如我們將rendercomponent賦值給v-if指令:
export default ,
data() }
data(),
,複製**
我們用陣列索引作為key,具體如下:
// outputs
evan - 0
sarah - 1
james - 2
複製**
現在假如我們刪除sarah,輸出:
evan - 0
james - 1
複製**
vue會發現key為0的evan沒變,key為1的原來是sarah,現在是james,所以認為key為1處的資料變了,vue會重新渲染james,然而james實際是沒有改變的,這誤導了vue。實際上當sarah被刪除時,vue會刪除sarah和james各自對應的元件,然後重新建立乙個james對應的元件。
所以某些時候用index作為key是有問題的,我們需要乙個唯一的鍵值(通常是id)來表示key。接下來修改**如下:
const people = [,,
,複製**
現在vue通過不同的id關聯兩個不同的元件,當你刪除乙個時,vue會刪除對於的元件,而不會影響到其他。如果我們增加一項資料到陣列,同樣不會影響其他元件,vue會根據所增加的資料建立乙個新的元件與之關聯,並將其插入正確的地方。
export default ,
data() {
return {
componentkey: 0
methods: {
forcererender(){
this.componentkey += 1;
mounted(){
this.forcererender();
複製**
請記住,如果你發現你需要強制重新渲染乙個元件,那麼可能你的實現不是最好的方法。如果確實需要強制重新渲染元件,那就選擇用key的方式。
vue強制重新整理元件
把乙個元件重置到初始狀態是乙個常見的需求,推薦的做法有兩種,一種是父元件重置子元件的 prop,另一種是子元件暴露乙個重置的方法供父元件呼叫。但有些時候,子元件既沒有提供重置的方法,也沒提供 prop 來重置自己的狀態。更重要的是,這個子元件我們還動不了。於是我們就需要一種 hack 的方式來強制子...
vue 強制重新整理元件
使用vue進行開發時,如果要重新整理當前路由,則呼叫router.go 0 方法即可。但是某些情況下,我們可能要求僅僅重新整理某個元件,而不是路由,那麼我們應該怎麼做呢?如果要在元件內部中進行強制重新整理,則可以呼叫this.forceupdate 強制重新渲染元件,從而達到更新目的。重新整理當前元...
vue強制重新整理元件 強制Vue重新渲染元件的方法
強制vue重新渲染元件的方法 閱讀 217 有時候,依賴 vue 響應方式來更新資料是不夠的,相反,我們需要手動重新渲染元件來更新資料。或者,我們可能只想拋開當前的dom,重新開始。那麼,如何讓vue以正確的方式重新呈現元件呢?強制 vue 重新渲染元件的最佳方法是在元件上設定 key。當我們需要重...