React.js:如何定义默认属性函数?

时间:2015-05-21 09:21:35

标签: javascript reactjs

我的组件使用函数来呈现一些内部文本。我想允许我的组件的所有者提供自定义函数作为属性。如果未提供自定义属性,则组件将使用它自己的默认功能。很自然地,我这样转向getDefaultProps

propTypes: function() {       
  renderText: React.PropTypes.func
};

getDefaultProps: function() {
  return {
    renderText: this._renderText
  };
}

问题是调用_renderTextundefinedgetDefaultProps。 我可以通过检查this.props.renderText是否已定义并在需要时退回this._renderText来解决此问题。但他并不像React的做事方式。

2 个答案:

答案 0 :(得分:6)

如果定义了renderText函数:

,它会起作用
getDefaultProps: function() {
  return {
    renderText: function() {
      // do sth
    }
  };
}

我认为你不能像你一样尝试this,因为:

  

getDefaultProps

     

在创建任何实例之前调用此方法,因此不能依赖this.prop

来源:https://facebook.github.io/react/docs/component-specs.html#getdefaultprops

答案 1 :(得分:1)

您可以使用:

Class Test extends Component{
    contrustor(props){
    ...
    }
    notify(data){
        console.log("Yeah!",data);
    }
    return (<div>This is context here.</div>)
}
Test.defaultProps={
    getNotify:Test.prototype.notify
}

此解决方案在react-router中工作正常,即使没有Redux或Flux等等。