在React的`getDefaultProps()`里面`this.props`?

时间:2015-10-14 12:58:37

标签: reactjs

我试图添加一个依赖于其他道具的道具,这些道具将基本上由该组件的所有者组件传递。

所以我做了:

propTypes: {
  user: React.PropTypes.object,
  comment: React.PropTypes.object
},

getDefaultProps: function() {
  return {
    admire: new Admire({
              user: this.props.user, 
              comment:this.props.comment
            })
  };
}

但似乎在user来电时无法访问道具commentgetDefaultProps

有没有办法定义一个默认道具,它取决于将从所有者组件传递的其他道具?

2 个答案:

答案 0 :(得分:23)

在创建任何实例之前调用

getDefaultProps,因此不能依赖this.props。它意味着获得默认道具,以防所有者未通过它们。

另一种解决方案是使用getInitialState,因为这样您就可以访问this.props.userthis.props.comment

答案 1 :(得分:2)

你不应该真的修改这样的道具,我相当肯定你会得到一个控制台警告这样做。

您可能希望通过Admire功能将getInitialState存储到州。

E.g。

propTypes: {
    user: React.PropTypes.object,
    comment: React.PropTypes.object
},
getInitialState: function() {
    return {
        admire: new Admire({
            user: this.props.user,
            comment: this.props.comment
        });
    };
}