Index 作为 key值的那些事

203 阅读2分钟

请先看小Din写的小Demo

codepen.io/dinyin/pen/…

codepen.io/dinyin/pen/…

第一个链接中 增删改查 完全没问题;而第二个里面 的第三列和第四列 在增删改查以后 却出差错了。

造成问题的原因是什么呢?背后的原理又是什么?

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的值 然后再渲染进去。

若有收获,就点个赞吧;程序媛给你比个❤️