第一个栗子?state={name:'Sam'}fn(){const{data}=this.state;data.name='xiaobe';this.setState({data:{...data}})}没有出现警告,且能实现效果,但这样的做法合理吗?第二个栗子?:使用了lodash/find,重新赋值了一个新的数组,但是原数组依旧被更改了,为什么?importfindfrom'lodash/find';state={data:[{id:1,name:'xiaobe'},{id:2,name:'Sam'}]}fn(){const{data}=this.state;constnewData=[...data];console.log('修改前data',data);constnewItem=find(newData,{id:1})||{};console.log('修改前newItem',newItem);if(Object.keys(newItem).length){newItem.name='new-xiaobe';}console.log('修改后newItem',newItem);this.setState({data:[...newData],},()=>{console.log('修改后data',data);},);}发现,修改前data里第一条name已经从xiaobe变成了new-xiaobe,请问为什么?
白板的微信
相关分类