react中的mobx6,使用数组splice方法修改数据,视图不响应

454 阅读1分钟
在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