在action使用数据方法修改数据之后,视图无法刷新响应。
问题猜测:必须要对数据进行赋值操作,才可以响应视图。
问题出处:使用数组splice方法,可以直接修改数组,无法通过返回值赋值,导致视图不刷新。
解决方式:对数据深拷贝再次赋值。
import {action,makeAutoObservable,observable} from 'mobx'
class Users {
// mobx@6 响应视图必配置
constructor(){
makeAutoObservable(this);
}
@observable userlist:any = [];
// 筛选
@action deluser = (text:any)=>{
this.userlist = this.userlist.filter((item:any)=>item._id !== text._id);
}
// 修改:查找替换
@action updateuser = (text:any)=>{
// 更新对象中的一条
this.userlist.forEach((item:any,index:any)=>{
if(item._id === text._id){
//问题:虽然数组被修改,但对数据没有赋值操作
this.userlist.splice(index,1,text);
}
})
// !!!!加上下面这一条,就解决了
this.userlist = [...this.userlist];
}
}
export default new Users();
2022.09.08补充 使用各种深拷贝的方式赋值,使得视图响应,会使得结构中的所有数据发生变化,会影响性能。 建议使用immer或者immutable