1、背景
在一个表单中可以通过选择,切换不同数据源并展示不同的表单项。如下场景
数据1:表单项 ABCDE
数据2:表单项 ABDFG
数据3:表单项 ABCF
2、问题现象
在用户从【数据1】切换到【数据2】后,保存数据2。保存了ABCDEFG 表单的C虽已不存在但值依然被保存
3、问题定位
表单的key值使用了动态数组生成的下标key值。导致切换scama时更新了数组的顺序,
以下为官网找到的解释
4、总结
1、不加key值
在一个数组中,更改某一项如插入或删除。增加或删除其中一项后,当前项以及后面所有的不管是否有变动都会被重新渲染。如果在最后一项新增开下不是很大,但我们往往更多的是插入到中间。
2、使用下标index
不推荐使用数组下标作为key,除非保证数组顺序不会变动的场景。因为使用数组下标在顺序发生改变时,非受控组件可能相互篡改,导致无法预期。
3、加key值
可以使用数据中的code值作为下标,这样既减少开销也不会产生其他的影响。但要注意的是,尽量不要使用不稳定的key(Math.random),这样会加大开销。可能会导致有些结点重复创建