当前位置: 首页 > 面试题库 >

为什么React道具是不可变的?

梁丘佑运
2023-03-14
问题内容

我一直在阅读React的快速入门文档。

无论您将组件声明为函数还是类,都不得修改其自身的道具

这是一个“纯”函数,因为它不尝试更改其输入,并且对于相同的输入始终返回相同的结果:

function sum(a, b) {
  return a + b;
}

这是“不纯”函数,因为它更改了自己的输入:https :
//codesandbox.io/s/9z38xv4x7r

function SayHi(props) {
  props.name = "Jim"; // TypeError Cannot assign to read only property 'name' of object '#<Object>'
  return <h1>Hi {props.name}!</h1>;
}

为什么React道具是只读的?


问题答案:

组件应管理自己的状态,但不应管理自己的道具。props本质上是“由组件所有者管理的状态”。这就是道具 不可变 的原因。

React
docs还建议将状态视为不可变的。这是因为this.state直接操作会绕过React的状态管理,这可能会很危险,因为setState()事后调用可能会替换您所做的
更改



 类似资料:
  • 我一直在阅读React的快速启动文档; 为什么React道具是只读的?

  • 在react中,您可以设置进入组件的道具的道具类型。对于我的一个道具,我希望值为null或一行JSX。React文档没有涵盖JSX应该使用的propType。 在测试时,我发现它在使用对象或元素的propTypes时不会抛出错误。当使用另一个符号(如符号)时,我会得到一个错误,表示它是一个对象。如果它是一个对象,当它是一个元素时,它肯定会抱怨。 JSX的正确类型是什么?

  • 本文向大家介绍String 为什 么是不可变的?相关面试题,主要包含被问及String 为什 么是不可变的?时的应答技巧和注意事项,需要的朋友参考一下 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,`private final char value[]`,所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 Ab

  • 为什么在下面的伪代码示例中,当容器更改foo.bar时,Child没有重新呈现? 即使我在修改容器中的值后调用,Child仍然显示旧值。

  • 有一个问题,为什么他们要求在字典中使用不可变对象作为键。 当我最近使用字典(显然不是为了哈希表)将Xml节点对象作为键放置时,这个问题实际上进入了我的脑海。然后,我在使用过程中多次更新节点。 那么,“使用不可变键”到底意味着什么呢?