copy 原来的对象,改变会影响到原来的,典型的拷贝问题
const obj_1 = {
a: '1',
};
//赋值引用数据类型,改变会影响原来的
console.log('obj_1', obj_1);
const obj_2 = obj_1;
obj_2.a = '2';
console.log('obj_1', obj_1);
console.log('obj_2', obj_2);
immer解决
produce参数1是数据源,参数2为拷贝了数据源,且互不影响
// immer 解决
import { set } from 'lodash';
const state = {
a: '1',
};
//produce包裹数据并深拷贝数据,并且可以处理,这个函数的的值是处理好的数据
function getobj1() {
return produce(state, (draftState: any) => {
set(draftState, 'b', '2');
});
}
const getobj2 = () => {
const nextState = produce(state, (draftState: any) => {
set(draftState, 'c', '3');
});
return { ...nextState };
};
console.log('getobj1()', getobj1());
console.log('state', state);
console.log('getobj2()', getobj2());
console.log('state', state);