fix createRegion reset
对于一些场景,没有使用createMappedRegion。
在使用createRegion的时候,如果使用下面这个方式修改数据:
region.set(prevValue => {
prevValue.xxx = 'xxxx';
return prevValue;
});
当 region 中没有数据的时候,就会将initialValue赋值给prevValue,这样会导致initialValue被修改,reset的时候就会出问题。
只要初始值是引用类型,就会出现这种问题,测试用例没加上这个:
test('reset array', async () => {
const region = createRegion<string[]>([]);
const {set, reset, getValue} = region;
set(prevValue => {
prevValue.push('testValue');
return prevValue;
});
expect(getValue()).toStrictEqual(['testValue']);
reset();
expect(getValue()).toStrictEqual([]);
});
暂时不认为这是一个 bug。
就像是如果使用 mutable 的方式使用 react,很多时候也会产生问题,region-core 本身就是一个 react 下的状态管理方案,本身就不希望用户以 mutable 的方式来使用。
这是一个可解释的行为,当然 copy 一份也是一个可解释的行为,这两个我都能接受。
那么,最终我决定还是不引入一个库(以及额外的计算逻辑)来解决这个问题(因为它不是问题,而是可解释的某种行为)。
所以,就像在 useState 中的一样,你应该总是使用 [...state, value] 来代替 state.push(value)。
同样的,就像这个操作在 react 中引起问题一样,这个操作在 region-core 也不被鼓励。
顺便一提,引用不变的写法,即使通过了 region-core,估计还是会有问题,react 那边说不定会产生问题的。
暂时不认为这是一个 bug。
就像是如果使用
mutable的方式使用react,很多时候也会产生问题,region-core本身就是一个react下的状态管理方案,本身就不希望用户以mutable的方式来使用。这是一个可解释的行为,当然
copy一份也是一个可解释的行为,这两个我都能接受。那么,最终我决定还是不引入一个库(以及额外的计算逻辑)来解决这个问题(因为它不是问题,而是可解释的某种行为)。
所以,就像在 useState 中的一样,你应该总是使用
[...state, value]来代替state.push(value)。同样的,就像这个操作在
react中引起问题一样,这个操作在region-core也不被鼓励。顺便一提,引用不变的写法,即使通过了
region-core,估计还是会有问题,react那边说不定会产生问题的。
get!