在ReactJS中如何从父组件获得子数组
How get children array from parent component in ReactJS?
我有一个组件,它有这样的子组件(JSX):
<div>
<ChildComponent />
<OtherChildComponent />
</div>
父类有一个方法,它需要查询所有子类以从它们那里获得一些信息。我该怎么做呢?
(伪代码)makeData()
{
for ( var i = 0; i < this.children.length; i++ )
{
console.log( this.children[i].getValue() );
}
}
this.props.children
将不起作用,因为它是从父代传递下来的孩子。如果我把传递给constructor
的children
存起来,那就是一个空对象。我该怎么做呢?
我也不想为每个子元素创建一个ref(这看起来像是硬编码)。
如果你需要在父组件中显示子组件的状态,那么它应该出现在开始的位置。
在阅读了官方文档中有关refs的更多信息后,应该清楚地知道它只应该在几种情况下使用,并且您将更好地组织和处理父组件中的状态,并仅将相关数据进一步传递给子组件。
Refs是一个很好的方式来发送消息到一个特定的子实例,这种方式将不方便通过流化的Reactive props和state来实现。但是,它们不应该成为应用程序中流动数据的首选抽象。默认情况下,使用Reactive数据流,并为非响应性的用例保存引用。
…
如果你没有使用React编写过几个应用程序,你的第一倾向通常是尝试使用refs来"让事情发生"。如果是这种情况,花点时间,更批判性地思考一下state在组件层次结构中的归属。通常,"拥有"的合适位置变得很明显;该状态在层次结构中处于更高的级别。将状态放置在那里通常会消除使用"使事情发生"的参考的任何愿望。-相反,数据流通常会完成你的目标。
你可以将一个函数作为prop传递给子函数,并在子函数挂载时调用它。
In your parent:
class Parent extends Component {
constructor(props) {
super(props)
this.values = []
}
addValue(value) {
this.values.push(value)
}
render() {
return (
<div>
<Child addValueToParent={ this.addValue } />
<Child addValueToParent={ this.addValue } />
<Child addValueToParent={ this.addValue } />
</div>
)
}
}
在您的孩子:
class Child extends Component {
componentDidMount() {
this.props.addValueToParent("foo")
}
render() {
...
}
}
但是,如果可以的话,最好将数据直接存储在父节点的状态中。
- 不能从angular2中的子组件指定父组件中的数组
- 从组件状态的数组中删除元素
- 将ember对象的数组从ember组件传递到模板
- 如何在cycle js中从JSON数组创建组件
- 使用数据数组创建多个类似组件
- 如何创建独立于数组更新的组件列表
- 访问要在 React Native Text 组件中显示的对象数组
- React:用CSS类标记数组中的活动组件
- 如何在 Vue.js 中保持可排序的数组和组件的顺序
- 使用 React 将数组导出为组件属性
- 如何使用组件从 vuejs 中获取纯数组
- 对React Native中从父组件传下来的props数组进行更改
- ReactJS中使用非子组件的子数组唯一键
- 聚合物网络组件数据绑定一个js对象/数组
- 如何访问foreach中Knockout组件中的数组成员
- React不能从组件中渲染数组
- Angular2 -在路由和渲染组件之前,通过service获取数组
- #每个循环不检测组件中定义的数组
- 从react组件'数组类型状态属性弹出的正确方式
- Mithril.js:为什么“组件模板必须返回一个虚拟元素,而不是数组、字符串等”?的意思