请先看小Din写的小Demo
第一个链接中 增删改查 完全没问题;而第二个里面 的第三列和第四列 在增删改查以后 却出差错了。
造成问题的原因是什么呢?背后的原理又是什么?
Antd的Input的defaultValue 和 value和代表的是两种不同的生命周期下设置的值;
defaultValue 代表的是 如componentDidMount 第一次 才会设置的值value 代表的是componentDidUpdate,componentWillReceiveProps等每次更新都会进行设置
而key值和他们有什么关系呢?
当key值没变的时候,即是同一个组件,当值更新的时候,会进入到componentDidUpdate,子组件会进入componentWillReceiveProps,来渲染组件的值;这个时候value会更新而defaultValue不会更新;
当key值变的时候,即是另外一个新组件,原来key值被删除,原来的组件会被卸载;新组件就会重新进入到constructor构造函数和componentDidMount这些第一次才进入的周期,defaultValue会更新;
把地址栏的值改为 100; 然后删除第一行之后;前后对比
- 检测key值,发现都是0,判定组件为同一个;
- 检测 “姓名” 栏,发现state有变化,重新渲染这部分;
- 检测 “年龄” 栏的input,发现对props的变化有处理,重新渲染这部分;
- 检测 “地址” 栏的input,发现没有对props进行处理,所以不进行重新渲染;
- 检测 “身高” 栏,发现没有对props进行处理,所以不进行重新渲染;
同理 当key值不变;渲染同一个子组件的值的时候,需要在子组件里重新拿到props的值 然后再渲染进去。
若有收获,就点个赞吧;程序媛给你比个❤️