小编典典

反应:嵌套defaultProps深度合并

reactjs

我有一个track具有以下定义的道具:

  propTypes: {
    track: React.PropTypes.shape({
      cover: React.PropTypes.string,
      title: React.PropTypes.string,
      artist: React.PropTypes.string
    })
  }

我希望track.cover获得默认值(如果未定义):

getDefaultProps: function() {
    return {
      track: {
          cover: 'placeholder.png'
        }
      }
  }

我有机会在视图级别做到这一点吗?是否getDefaultProps进行深层合并?还是需要在模型级别处理?

谢谢


阅读 363

收藏
2020-07-22

共1个答案

小编典典

getDefaultProps不会将传递的属性值与指定的返回值合并。如果该属性不存在,React将使用返回的对象getDefaultProps来初始化组件实例。

下面的代码例如产生:

Test Cover and

码:

var TrackItem = React.createClass({
  render: function() {
    var track = this.props.track;
    return (<div>{track.cover} and {track.artist}</div>);
  },
  getDefaultProps: function() {
    return {
      track: {
          artist: 'def artist'
        }
      }
  }        
});

var track = {
    cover: 'Test Cover'    
};
React.render(<TrackItem track={ track } />, mountNode);

另外,请注意,返回的对象在getDefaultProps组件的所有实例之间共享(参考)。

2020-07-22