Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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/22.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 什么是;“真理的单一来源”;什么意思?_Javascript_Reactjs - Fatal编程技术网

Javascript 什么是;“真理的单一来源”;什么意思?

Javascript 什么是;“真理的单一来源”;什么意思?,javascript,reactjs,Javascript,Reactjs,我读过。在“受控部件”部分,有一句话: 通过使反应状态成为“真理的单一来源”,我们可以将两者结合起来 “单一真实来源”是什么意思?通常,在HTML+JS中,的状态/值由浏览器控制,而不是由javascript控制。如果您还将此类输入的值保留在javascript中(出于任何原因),这意味着至少有“两个真实来源”——浏览器认为该值是什么,代码认为该值是什么 使用React“受控组件”,两个状态/值始终匹配,因为React始终确保浏览器的()值等于您从javascript提供的值(使用值属性),因此

我读过。在“受控部件”部分,有一句话:

通过使反应状态成为“真理的单一来源”,我们可以将两者结合起来


“单一真实来源”是什么意思?

通常,在HTML+JS中,
的状态/值由浏览器控制,而不是由javascript控制。如果您还将此类输入的值保留在javascript中(出于任何原因),这意味着至少有“两个真实来源”——浏览器认为该值是什么,代码认为该值是什么


使用React“受控组件”,两个状态/值始终匹配,因为React始终确保浏览器的(
)值等于您从javascript提供的值(使用
属性),因此有效地说,只有一个“真实来源”左..

特别是在您链接的文章中,它讨论了“受控”和“非受控”组件

基本上,当您想要实现“单一真相来源”时,您想要使您的组件可控

默认情况下,输入字段是不可控制的,这意味着它将从DOM而不是状态呈现数据

但是,如果您让您的输入改为侦听状态(因此使其可控),则除非您更改状态,否则它将无法更改其值

您将注意到的第一个效果是,一旦您向其添加了value属性,当您输入时,什么都不会改变。如果您添加改变状态的
onChange
方法,它将是完全可控的组件,只监听一个真相来源;状态,而不是DOM事件

--

这也与单向数据绑定有关。这意味着只有一个地方代表应用程序的状态,您的UI会监听它。只有当这个地方的数据发生变化时,监听用户界面才会发生变化,而不是其他地方

--

这也可能有用:

在React-Redux应用程序中,当您的Redux是真实的单一来源时,这意味着在UI中更改数据的唯一方法是分派Redux操作,该操作将更改Redux reducer中的状态。您的React组件将监视这个减速机,如果减速机发生了变化,那么UI也会发生变化。但决不能反过来,因为雷多克斯州是真相的唯一来源

这是Redux world中的外观:


一个实际的例子是,您有一个Redux存储,其中包含要显示的项目。为了更改要显示的项目列表,您不能在存储区以外的任何位置更改此数据。如果这一点发生了变化,那么与之相关的一切都应该发生变化

我没有读过这篇文章,但很明显,他们在谈论将两个数据源合并为一个,这样就只有一个地方可以查找最新的数据。这个问题与Redux无关,如果你费心检查哪篇文章被链接,你就会知道这一点。@xs0 React有相同的规则,只需将redux替换为容器组件即可。所有子组件都将通过道具访问容器组件数据。您还可以将所有操作(在本例中是容器中的方法)传递给子级(如果需要在这些方法中使用
this
关键字,请使用
.bind(this)
)。当事件发生时,子组件将通知容器,容器将更改其状态。因此,将从中更新所有子项。我建议阅读有关“容器演示者”设计模式的内容,以便进一步了解这种方法以及您如何从中获益。@xs0这是真的,我的错误。故事仍然相似。我在之前的评论中添加了更多的信息,也添加了和你们链接的文章相关的信息。