前天我在使用一個前端多選框組件時遇到了一個問題,明明對象內的值已經修改了,但是組件顯示的還是沒有效果改變,以下是當時打出的log,我打印了這個對象的信息
對象內的值已經修改了但是組件還是不能及時更改,
后來我多做幾次發現和對象內的get和set方法有關系,每當對象變量(map)初始化(整體重新賦值也算)的時候,會為對象添加對應的get方法和set方法,
但是由於我初始化的時候只給了all和ZERO,如圖所示:
后來添加其他元素的時候也是使用的直接添加的方式:
導致后來加入的屬性沒有get和set方法,從而導致組件出了問題,
解決辦法,只需要在修改變量的時候將整個變量賦值到一個新的對象上就可以了,讓其初始化一次,生成新的get和set方法,如圖所示:
暫時定義變量用來存放數據,數據添加到這個臨時的對象上,最后再把這個對象賦值給正在使用的變量,這樣就可以生成全部的get和set方法:
點開之后再看發現有mobx的js,所以我猜測這是mobx特有的特性(本人猜測,沒有源碼證據,如有錯誤請在評論區留言),其他框架或許也有這個問題,大家可以試試