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

时间:2017-11-08 14:58:49

标签: javascript reactjs

我看过this article。在“受控组件”部分中,有一个句子:

  

我们可以通过使React状态成为“单一事实来源”来将两者结合起来。

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

2 个答案:

答案 0 :(得分:5)

特别是在您链接的文章中,它谈到了“受控制的”#39;和'不受控制的'组件。

基本上,当你想要实现单一的事实来源时,你想让你的组件可以控制。

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

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

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

-

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

http://i.imgur.com/hJmGMqu.jpg

-

enter image description here

这也许有用:https://redux.js.org/docs/basics/DataFlow.html

在React-Redux应用程序中,当您的Redux是单一事实来源时,这意味着在UI中更改数据的唯一方法是发送redux操作,这将改变redux reducer中的状态。而你的React组件会观察这个减速器,如果减速器发生变化,那么UI也会自行改变。但从来没有其他方式,因为Redux状态是单一的事实来源。

这就是它在Redux世界中的表现:

enter image description here

一个实际的例子是你有Redux商店,其中包含你想要显示的项目。要更改要显示的项目列表,您不能在除商店之外的任何其他位置更改此数据。如果改变了,那么与之相关的其他一切也应该改变。

答案 1 :(得分:4)

通常,在HTML + JS中,<input>的状态/值由浏览器控制,而不是javascript。如果您还在javascript中保留此类输入的值(出于任何原因),则意味着至少有两个真实来源&#34; - 浏览器认为该值是什么,以及您的代码认为该值是什么。

使用React&#34;受控组件&#34;,两个状态/值始终匹配,因为React始终确保浏览器的<input>&#39; s)值等于你从javascript(使用value属性)提供的那个,并且如此有效,只有一个&#34;真实来源&#34;左..