React:嵌套的 defaultProps 深度合并

React: Nested defaultProps deep merge

我有一个 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 是否进行深度合并? 或者我需要在模型级别处理这个问题吗?

谢谢

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

下面的代码例如产生:

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

另外,请注意 return 在 getDefaultProps 中编辑的对象在一个组件 (reference) 的所有实例之间共享。