通过道具与方法调用反应传递数据

React passing data via props vs method call

假设我有一个呈现文本输入字段的组件 X + 一个 child 组件 Y。Y 使用输入字段中的文本来呈现其他内容。

为了获取数据,X 从文本字段中侦听更改事件,然后通过引用获取其更新的内容。

据我了解,我可以通过两种方式将数据传递给 child Y。

1) X 将新数据存储在它的状态中,因此它的渲染方法被触发,这里我使用像 <Y something={data}/>

这样的道具将数据传递给 Y

2) X 通过像 this.refs.y.setSomething(data) 一样使用 ref 来调用 Y 上的方法。在这种情况下,我不需要将数据存储在 X 的状态中。

所以除了在 X 中存储状态之外,选择其中一个而不是另一个的原因是什么?

您应该使用 props 将数据传递到子组件中,如 documentation 中那样。您可以将 props 视为子组件的函数参数。

除了在 React 中执行此操作的惯用方式外,我还可以想到您应该这样做的几个原因。首先,调用像 this.refs.y.setSomething(data) 这样的方法意味着您需要实现将状态存储在 Y 中的代码。因此您不必在 X 中设置状态,而是在 Y 中进行设置。

更重要的是,如果 X 由于某种原因在重新渲染期间卸载了 Y,然后又重新加载它,您将丢失 Y 中的状态。但是如果您传入 props,那么 Y 将收到相同的 props卸载之前和之后。