答案 0 :(得分:5)
特别是在您链接的文章中,它谈到了“受控制的”#39;和'不受控制的'组件。
基本上,当你想要实现单一的事实来源时,你想让你的组件可以控制。
默认情况下,输入字段不可控,这意味着它将从DOM呈现数据,而不是状态。
但是,如果您使输入听取状态(因此使其可控),除非您更改状态,否则它将无法更改其值。
你会注意到的第一个效果是,一旦你为它添加了value属性,当你输入时,什么都不会改变。如果你添加改变状态的onChange
方法,它将是完全可控的组件,只能监听一个真实来源; state,而不是DOM事件。
-
这也与单向数据绑定有关。这意味着只有一个地方代表应用程序状态,您的UI会监听它。只有当这个地方的数据发生变化时,听力界面才会发生变化。
-
这也许有用:https://redux.js.org/docs/basics/DataFlow.html
在React-Redux应用程序中,当您的Redux是单一事实来源时,这意味着在UI中更改数据的唯一方法是发送redux操作,这将改变redux reducer中的状态。而你的React组件会观察这个减速器,如果减速器发生变化,那么UI也会自行改变。但从来没有其他方式,因为Redux状态是单一的事实来源。
这就是它在Redux世界中的表现:
一个实际的例子是你有Redux商店,其中包含你想要显示的项目。要更改要显示的项目列表,您不能在除商店之外的任何其他位置更改此数据。如果改变了,那么与之相关的其他一切也应该改变。
答案 1 :(得分:4)
通常,在HTML + JS中,<input>
的状态/值由浏览器控制,而不是javascript。如果您还在javascript中保留此类输入的值(出于任何原因),则意味着至少有两个真实来源&#34; - 浏览器认为该值是什么,以及您的代码认为该值是什么。
使用React&#34;受控组件&#34;,两个状态/值始终匹配,因为React始终确保浏览器的<input>
&#39; s)值等于你从javascript(使用value
属性)提供的那个,并且如此有效,只有一个&#34;真实来源&#34;左..