Javascript 什么是;“真理的单一来源”;什么意思?
我读过。在“受控部件”部分,有一句话: 通过使反应状态成为“真理的单一来源”,我们可以将两者结合起来Javascript 什么是;“真理的单一来源”;什么意思?,javascript,reactjs,Javascript,Reactjs,我读过。在“受控部件”部分,有一句话: 通过使反应状态成为“真理的单一来源”,我们可以将两者结合起来 “单一真实来源”是什么意思?通常,在HTML+JS中,的状态/值由浏览器控制,而不是由javascript控制。如果您还将此类输入的值保留在javascript中(出于任何原因),这意味着至少有“两个真实来源”——浏览器认为该值是什么,代码认为该值是什么 使用React“受控组件”,两个状态/值始终匹配,因为React始终确保浏览器的()值等于您从javascript提供的值(使用值属性),因此
“单一真实来源”是什么意思?通常,在HTML+JS中,
的状态/值由浏览器控制,而不是由javascript控制。如果您还将此类输入的值保留在javascript中(出于任何原因),这意味着至少有“两个真实来源”——浏览器认为该值是什么,代码认为该值是什么
使用React“受控组件”,两个状态/值始终匹配,因为React始终确保浏览器的(
)值等于您从javascript提供的值(使用值
属性),因此有效地说,只有一个“真实来源”左..特别是在您链接的文章中,它讨论了“受控”和“非受控”组件
基本上,当您想要实现“单一真相来源”时,您想要使您的组件可控
默认情况下,输入字段是不可控制的,这意味着它将从DOM而不是状态呈现数据
但是,如果您让您的输入改为侦听状态(因此使其可控),则除非您更改状态,否则它将无法更改其值
您将注意到的第一个效果是,一旦您向其添加了value属性,当您输入时,什么都不会改变。如果您添加改变状态的onChange
方法,它将是完全可控的组件,只监听一个真相来源;状态,而不是DOM事件
--
这也与单向数据绑定有关。这意味着只有一个地方代表应用程序的状态,您的UI会监听它。只有当这个地方的数据发生变化时,监听用户界面才会发生变化,而不是其他地方
--
这也可能有用:
在React-Redux应用程序中,当您的Redux是真实的单一来源时,这意味着在UI中更改数据的唯一方法是分派Redux操作,该操作将更改Redux reducer中的状态。您的React组件将监视这个减速机,如果减速机发生了变化,那么UI也会发生变化。但决不能反过来,因为雷多克斯州是真相的唯一来源
这是Redux world中的外观:
一个实际的例子是,您有一个Redux存储,其中包含要显示的项目。为了更改要显示的项目列表,您不能在存储区以外的任何位置更改此数据。如果这一点发生了变化,那么与之相关的一切都应该发生变化 我没有读过这篇文章,但很明显,他们在谈论将两个数据源合并为一个,这样就只有一个地方可以查找最新的数据。这个问题与Redux无关,如果你费心检查哪篇文章被链接,你就会知道这一点。@xs0 React有相同的规则,只需将redux替换为容器组件即可。所有子组件都将通过道具访问容器组件数据。您还可以将所有操作(在本例中是容器中的方法)传递给子级(如果需要在这些方法中使用
this
关键字,请使用.bind(this)
)。当事件发生时,子组件将通知容器,容器将更改其状态。因此,将从中更新所有子项。我建议阅读有关“容器演示者”设计模式的内容,以便进一步了解这种方法以及您如何从中获益。@xs0这是真的,我的错误。故事仍然相似。我在之前的评论中添加了更多的信息,也添加了和你们链接的文章相关的信息。