当前位置: 首页 > 知识库问答 >
问题:

反应:如果值是按值传递的,为什么有必要使用不可变的道具?

朱越
2023-03-14

我不太喜欢JavaScript。因此,我们进行了以下修补:

var demo = 'test';

var obj = {
  x: 'abc'
}

function foo(str) {
  str += '_123';

  return str;
}

var ret = foo(demo);
var retObj = foo(obj.x);

console.log('Result: %s', ret); // => 'test_123'
console.log('Used parameter: %s', demo); // 'test'

console.log('Result: %s', retObj); // 'abc_123'
// The value of the property is still unchanged. So
//  it has been passed in as by value. As as copy.
console.log('Used parameter: %s', obj.x); // 'abc'

我向函数传递一个字符串。一次作为基元变量,下一次作为对象属性。

之后,原始数据保持不变=

现在我想知道:

为什么它们在React中具有这些不变性特性?

我的意思是:他们说函数应该做一些事情,并提供结果。但不改变整个系统。

但如果数据还是按值传递呢?为什么有了不变性,世界变得如此重要?

共有1个答案

花高爽
2023-03-14

在这两个示例中,都将字符串传递给函数obj是一个对象,但是obj.x是一个字符串。

JavaScript将字符串和数字(原语)视为不可变的。因此,如果你这样做:

var a = "bob";
var b = a;
b = "jack";

原始字符串a将保持不变。

但对象是不同的。如果您这样做:

var propsObj = { name: "bob" };
var newPropsObj = propsObj;
newPropsObj.name = "jack";

然后propsObj也会改变,所以propsObj现在是{name:“jack”}

React使用您传递的东西作为道具和状态来创建其虚拟DOM。因为react使用这些来查看是否有任何更改,并且只呈现确实更改的内容,所以react依赖于您的代码,在您将其传递给react之后,不会更改道具或状态。

在第二个例子中,这将导致react认为新道具和旧道具仍然是相同的,因此react将(错误地)得出不需要重新渲染的结论。

 类似资料:
  • 本文向大家介绍什么是PHP中的按引用传递和按值传递?,包括了什么是PHP中的按引用传递和按值传递?的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将学习PHP中的按值传递和按引用传递。  现在,让我们详细了解这两个概念。 通常,在PHP中,我们遵循通过按值传递方法将参数传递给函数的方法。我们之所以遵循这种做法,是因为如果函数中参数的值被更改,则在函数外部它不会被更改。 在某些情况下,我们可

  • 两者之间有什么区别 引用传递的参数 通过值传递的参数? 你能给我举几个例子吗?

  • 在学习了React之后,我仍然认为很多概念很难理解。 其中包括:道具的不变性。 如果我没弄错的话,那么组件或多或少相当于面向对象编程中的对象。 在面向对象编程中,您通过方法参数将数据传递给对象。在React中,您获得了将数据传递给组件的道具。 如果将参数传递给Java方法,则可以在方法体中更改这些数据。没问题。 在 React 中是不可能的,因为道具是不可变的。 我看过的所有文献和材料都提到了这些

  • 因此,在父对象的状态中所做的更改也可以通过它所出现的道具立即在子对象中使用。 这样做正确吗?

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

  • 问题内容: 我一直在阅读React的快速入门文档。 无论您将组件声明为函数还是类,都不得修改其自身的道具 这是一个“纯”函数,因为它不尝试更改其输入,并且对于相同的输入始终返回相同的结果: 这是“不纯”函数,因为它更改了自己的输入:https : //codesandbox.io/s/9z38xv4x7r 为什么React道具是只读的? 问题答案: 组件应管理自己的状态,但不应管理自己的道具。本质