Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么React及其生态系统中包含不变性的概念?_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 为什么React及其生态系统中包含不变性的概念?

Javascript 为什么React及其生态系统中包含不变性的概念?,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,在ES6中,还有其他方法来声明变量,如let和const 不能重新分配或重新声明使用常量声明的变量 为什么React应用程序中有这么多const声明,使用const over var和let有什么独特的好处?很常见的情况是,代码的多个部分依赖于同一个变量(例如PI)。如果这个变量是一个常量,并且是不可变的,那么您就不必担心它会在不可预知的时间发生变化,这取决于可能会向它写入数据的人 如果变量不应更改,则应将其设置为常量,以确保不会意外重新赋值。这样,您就可以相信变量的值总是相同的 注意,cons

在ES6中,还有其他方法来声明变量,如let和const

不能重新分配或重新声明使用常量声明的变量


为什么React应用程序中有这么多const声明,使用const over var和let有什么独特的好处?

很常见的情况是,代码的多个部分依赖于同一个变量(例如PI)。如果这个变量是一个常量,并且是不可变的,那么您就不必担心它会在不可预知的时间发生变化,这取决于可能会向它写入数据的人

如果变量不应更改,则应将其设置为常量,以确保不会意外重新赋值。这样,您就可以相信变量的值总是相同的


注意,
const
与不变性关系不大。即使对某个对象有一个常量引用,该对象本身仍然可以更改

代码的多个部分依赖于同一个变量(例如PI)是很常见的。如果这个变量是一个常量,并且是不可变的,那么您就不必担心它会在不可预知的时间发生变化,这取决于可能会向它写入数据的人

如果变量不应更改,则应将其设置为常量,以确保不会意外重新赋值。这样,您就可以相信变量的值总是相同的

注意,
const
与不变性关系不大。即使对某个对象有一个常量引用,该对象本身仍然可以更改

首先正确解释const的用法。 但是
const
关键字本身不足以实现不变性。 e、 g.您可以变异常量数组:

const a = [12,14,15];
a[0] = 13; // allowed. but mutate a value.
为了在属性级别实现对对象的不变性,新的JS使用
object.freeze()
.assign()
等提供,或者您也可以使用像immutableJS这样的新库(很少有更好的库可以签出)

关于React中的不变性,React组件是纯函数。他们接受道具并返回视图。 纯函数是函数编程的基础。它们带来了各种各样的好处(支持组合、易于理解代码单元(即函数)、易于测试等等)。纯功能没有任何副作用。它也不能修改参数对象,并将其视为不可变的

React组件创建的DOM形成虚拟DOM,并检测仅通过setState调用的数据更改。调用
setState
,它会做出反应并触发其真正的DOM更新算法。如果开发人员更新道具,这不会发生。这篇文章解释了这一点:

React鼓励单向数据流,更新状态流作为道具自上而下,对用户操作的反应作为方法调用向上。单向数据流使调试/理解react应用程序变得容易

我创建了下面的图表来理解中所示的示例

首先正确解释const的用法。 但是
const
关键字本身不足以实现不变性。 e、 g.您可以变异常量数组:

const a = [12,14,15];
a[0] = 13; // allowed. but mutate a value.
为了在属性级别实现对对象的不变性,新的JS使用
object.freeze()
.assign()
等提供,或者您也可以使用像immutableJS这样的新库(很少有更好的库可以签出)

关于React中的不变性,React组件是纯函数。他们接受道具并返回视图。 纯函数是函数编程的基础。它们带来了各种各样的好处(支持组合、易于理解代码单元(即函数)、易于测试等等)。纯功能没有任何副作用。它也不能修改参数对象,并将其视为不可变的

React组件创建的DOM形成虚拟DOM,并检测仅通过setState调用的数据更改。调用
setState
,它会做出反应并触发真正的DOM更新算法。如果开发人员更新道具,这不会发生。这篇文章解释了这一点:

React鼓励单向数据流,更新状态流作为道具自上而下,对用户操作的反应作为方法调用向上。单向数据流使调试/理解react应用程序变得容易

我创建了以下图表,以了解中所示的示例


不变性保护您免受某些错误的攻击,并提高您的React组件的性能。开发一个好的React应用程序的关键之一是单向数据流<代码>常量是实现这一目标的更大难题中的一部分。这就是说,之所以使用
const
,单向数据流的总体目标实际上是框架内的一种固执己见的立场;框架文档和项目维护人员对这些概念的研究和讨论比这里要好得多。查看React团队的演示文稿,其中解释了React中不可变项的用法。这个问题需要一些澄清
const
意味着您无法重新分配,但这与变量引用的对象的不变性无关。不变性保护您免受某些错误的影响,并提高React组件的性能。开发一个好的React应用程序的关键之一是单向数据流<代码>常量是实现这一目标的更大难题中的一部分。这就是说,之所以使用
const
,单向数据流的总体目标实际上是框架内的一种固执己见的立场;框架文档和项目维护人员对这些概念的研究和讨论比这里要好得多。查看React团队的演示文稿,其中解释了React中不可变项的用法。这个问题需要一些澄清
const
表示不能重新分配,但它与