2015-10-14 61 views
13

我正在尝试添加一个道具,该道具取决于组件的所有者组件基本上传递的其他道具。`React的`getDefaultProps()`里面的`this.props`?

所以我做:

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

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

但好像道具usercomment是不是在getDefaultProps通话时间访问。

有没有什么方法可以定义一个默认道具,这个道具取决于将从所有者组件传递的其他道具?

回答

21

getDefaultProps在创建任何实例之前被调用,因此不能依靠this.props。这是为了获得默认的道具,以防主人没有通过它们。

另一种解决方案是使用getInitialState,因为这会让您访问this.props.userthis.props.comment

2

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

您可能希望通过getInitialState函数将Admire存储为状态。

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 
     }); 
    }; 
}