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