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

IT技术 javascript reactjs
2021-04-18 01:01:50

我已经阅读了这篇文章在“受控组件”部分,有一句话:

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

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

2个回答

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

基本上,当您想要实现“单一事实来源”时,您想让您的组件可控。

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

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

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

——

这也与单向数据绑定有关这意味着只有一个地方代表应用程序的状态,您的 UI 会监听它。并且只有在此位置的数据发生更改时,侦听 UI 才会更改,否则不会更改。

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

——

在此处输入图片说明

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

在 React-Redux 应用程序中,当您的 Redux 是单一事实来源时,这意味着在 UI 中更改数据的唯一方法是调度 redux action,这将更改 redux reducer 中的状态。你的 React 组件会监视这个 reducer,如果这个 reducer 改变,那么 UI 也会改变自己。但绝不会反过来,因为 Redux 状态是唯一的事实来源。

这是它在 Redux 世界中的样子:

在此处输入图片说明

一个实际的例子是你有 Redux 商店,其中包含要显示的项目。为了更改要显示的项目列表,您不要在商店以外的任何其他地方更改此数据。如果这发生了变化,与之相关的所有其他事情也应该发生变化。

@xs0 是的,我的错误。故事依旧相似。我在之前的评论中添加了更多信息,还添加了信息来回答与您链接的文章相关的问题。
2021-05-26 01:01:50
@xs0 React 也有同样的规则,只是将 redux 替换为容器组件。所有子组件都可以通过 props 访问容器组件数据。您还将所有操作(在这种情况下来自容器的方法)传递给子项(.bind(this)如果您需要this在这些方法中使用关键字,请使用)。当事件发生时,子组件会通知容器它并且容器会改变它的状态。因此,所有子项都将从它更新。我建议阅读有关“容器-演示者”设计模式的内容,以进一步了解这种方法以及您如何从中受益。
2021-06-01 01:01:50
这个问题与 Redux 无关,如果您费心检查链接了哪篇文章,您就会知道。
2021-06-20 01:01:50

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

使用 React“受控组件”,这两个状态/值始终匹配,因为 React 始终确保浏览器的 ( <input>'s) 值等于您从 javascript(使用value属性)提供的值,因此有效地,只有一个“真相之源”离开..