Reactjs 是否有一种方法可以让您对“自动定义”做出反应;“钥匙”;给孩子们?
我正在学习如何反应,我偶然发现了“充满活力的孩子”的这种怪癖 序言和代码示例:Reactjs 是否有一种方法可以让您对“自动定义”做出反应;“钥匙”;给孩子们?,reactjs,Reactjs,我正在学习如何反应,我偶然发现了“充满活力的孩子”的这种怪癖 序言和代码示例: //渲染过程1 第1款 第2款 //渲染过程2 第2款 在第二个render()过程中,vdom扩散的工作方式似乎是删除第二个子项,然后将第一个子项中的文本转换为“段落2”。速度很快,但如果需要状态保持不变,您会看到奇怪的事情发生。。。第二个孩子 所以React建议使用。现在,vdom差分将毫无意外,您将看到状态在renders()中得到保留 我的问题是:有没有办法让React自行设置“键”,而不是按照他们建议的方
//渲染过程1
第1款
第2款
//渲染过程2
第2款
在第二个render()
过程中,vdom扩散的工作方式似乎是删除第二个子项,然后将第一个子项中的文本转换为“段落2”。速度很快,但如果需要状态保持不变,您会看到奇怪的事情发生。。。第二个孩子
所以React建议使用。现在,vdom差分将毫无意外,您将看到状态在renders()
中得到保留
我的问题是:有没有办法让React自行设置“键”,而不是按照他们建议的方式设置?不,没有。 如您所观察到的,在没有指定键的情况下,React的默认行为是使用一种简单的方法在适当的位置更新组件。在功能上,这相当于根据元素相对于其同级的索引指定默认键。在您的示例中,这看起来像:
// Render Pass 1
<Card>
<p key={0}>Paragraph 1</p>
<p key={1}>Paragraph 2</p>
</Card>
// Render Pass 2
<Card>
<p key={0}>Paragraph 2</p>
</Card>
//渲染过程1
第1段
第2段
//渲染过程2
第2段
这就是为什么您会看到第一个元素的文本被转换,但正如您所注意到的,这并不总是最佳结果。那么为什么不能使用更智能的自动钥匙呢?答案是,要做到这一点,实际上只有两种选择,而这两种选择都不理想:
您可以调用
React.Children.toArray
自动定义键感谢@hopper的全面回答。是的,我想每次只写{item.message}
并不难。我想我们可以假设React的人认为速度优势证明了这一点不便。但是在生成组件时随机字符串分配又如何呢?为什么这样不好?不确定为什么react不能提供一种显式生成密钥的简单方法。这样一来,人们就可以获得钥匙和人类判断力的所有好处,而不用被迫想出一些东西来用作钥匙。