类似于在React.js中将props传递给父组件,但是我只对将子组件的默认props传递给父组件感兴趣。
那我为什么要这样做呢?
好吧,我有一个父组件,可渲染包含HTML表单的子组件。父级的render()方法应将其状态数据作为道具传递给子级。
最初,子表单应仅包含一些默认数据。从子组件中定义的defaultProps中获取数据是有意义的。毕竟,我不想在父母的状态下设置默认数据负载,其唯一目的是将其作为默认道具传递给孩子。父母无需定义孩子的默认道具。孩子应该知道自己的默认道具是什么。
因此,在我的初始父对象render()中,我将状态保留为未定义。当它作为未定义的道具传递给孩子时,孩子将使用其defaultProps代替。这就是我想要的。
时间流逝...
现在,用户可以更改子组件窗体上的字段。我通过回调函数将该更改传递回了父级,以便它重新计算父级的新状态。然后,我setState()
在父级中调用a以照常重新渲染所有子级组件。
问题是我需要父母的状态为一个对象,其中包含更多嵌套的对象,并且正在使用[反应不可变性助手] [1]计算父母中的新状态,如下所示:
handleFormFieldChange(e) {
// reactUpdate imported from 'react-addons-update'
var newState = reactUpdate(this.state, {
formData: {values: {formFieldValues: {[e.currentTarget.name]: {$set: e.currentTarget.value}}}}
});
this.setState(newState);
}
这段代码第一次运行时,将引发错误,因为它正在尝试更新状态值,并且没有要更新的状态。(记住,我没有定义它!)
如果试图通过将默认初始状态设置为空对象(每个对象都嵌套有空对象)来解决此问题,则会遇到catch 22。在第一个渲染中,这些空值将作为空道具向下传递给子级,因此将覆盖我为子级组件设置的defaultProps。mm!
因此,据我所知,我需要一个明智的初始状态来传递给子组件,但又不能在父组件中再次(重新)定义整个组件。因此,在这种情况下,我认为将孩子的defaultProps拉入父级是很有意义的,只是为了设置父级的初始状态。
我有一种方法,稍后将发布。但是在我这样做之前,还有人有更好的方法吗?一个可以避免必须将defaultProps从子级传递到父级的方法吗?
如果您正在使用,React.Component
则defaultProps
该类是一个静态对象,因此很容易获得。
export default class Child extends React.Component {
static defaultProps = { ... }
}
// If you don't have es7 static support you can add it after the class def:
Child.defaultProps = { ... }
父母只需要做:
Child.defaultProps
访问它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句