React: Вложенные дефолты по умолчанию

У меня есть track prop со следующим определением:

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

Я хотел бы, чтобы track.cover получил значение по умолчанию, если undefined:

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

Есть ли вероятность, что я смогу сделать это на уровне представления? Делает ли getDefaultProps глубокое объединение? Или мне нужно справиться с этим на уровне модели?

Спасибо

Ответ 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, совместно используются во всех экземплярах компонента (ссылка).