【发布时间】:2018-04-21 07:52:17
【问题描述】:
【问题讨论】:
-
我没有读过这篇文章,但很明显他们在谈论将两个数据源合二为一,以便只有一个地方可以查找最新数据。
标签: javascript reactjs
【问题讨论】:
标签: javascript reactjs
在您链接的文章中特别谈到了“受控”和“不受控”组件。
基本上,当您想要实现“单一事实来源”时,您希望让您的组件可控。
默认情况下,输入字段是不可控制的,这意味着它将呈现来自 DOM 的数据,而不是状态。
但是,如果您让输入改为监听状态(因此使其可控),除非您更改状态,否则它将无法更改其值。
你会注意到的第一个效果是,一旦你给它添加了 value 属性,当你输入时,什么都不会改变。如果你添加onChange改变状态的方法,它将是完全可控的组件,只听一个事实来源;状态,而不是 DOM 事件。
--
这也与单向数据绑定有关。这意味着只有一个地方代表应用程序的状态,您的 UI 会监听它。只有当这个地方的数据改变时,监听 UI 才会改变,不会改变。
--
这也可能有用:https://redux.js.org/docs/basics/DataFlow.html
在 React-Redux 应用程序中,当您的 Redux 是单一数据源时,这意味着在 UI 中更改数据的唯一方法是调度 redux action,该 action 将更改 redux reducer 中的状态。你的 React 组件会监视这个 reducer,如果这个 reducer 改变了,那么 UI 也会改变自己。但绝不是其他方式,因为 Redux 状态是单一事实来源。
这就是它在 Redux 世界中的样子:
一个实际的例子是你有一个 Redux 存储,其中包含你想要显示的项目。为了更改要显示的项目列表,您不要在商店以外的任何地方更改此数据。如果这种情况发生了变化,与之相关的所有其他事情也应该发生变化。
【讨论】:
this 关键字,请使用 .bind(this))。当事件发生时,子组件将通知容器,容器将改变其状态。因此,所有孩子都将从中更新。我建议阅读“容器-演示者”设计模式,以进一步了解这种方法以及如何从中受益。
通常,在 HTML + JS 中,<input> 的状态/值由浏览器控制,而不是 javascript。如果您还在 javascript 中保留此类输入的值(出于任何原因),则意味着至少存在“两个事实来源” - 浏览器认为该值是什么,以及您的代码认为该值是什么。
使用 React “受控组件”,两个状态/值始终匹配,因为 React 始终确保浏览器的 (<input>'s) 值等于您从 javascript 提供的值(使用 value 属性),因此,有效地,只剩下一个“真相来源”了..
【讨论】: