Я собираюсь использовать пример для объяснения функциональности, которую я ищу.Реагировать на реквизиты для детей при перезаписи родительских реквизитов родителя
const Grandparent = React.createClass({
render: function(){
return (<div>
<Parent>
<button className={this.props.parentClassName} />
</Parent>
<div>
)
}
});
const Parent = React.createClass({
render: function(){
const childrenWithProps = React.Children.map(this.props.children, (child) => {
return React.cloneElement(child, {parentClassName: 'Murphy'});
});
return (<div>
{childrenWithProps}
</div>)
}
});
То, что я хотел бы для компонента Parent, чтобы перехватить props.parentClassName установить в GrandParent и изменить его или создать его, если он не существует.
Симметричных для кнопки, чтобы получить правильный parentClassName я должен создать пользовательские кнопки компоненты для получения реквизита только из компонента Parent, как и
React.createClass({
render: function(){
return (<button className={this.props.parentClassName} />)
}
});
Я хочу, чтобы избежать этого, если это возможно, потому что извлекает код, который я хотел бы видеть при объявлении исходного компонента.
Так что я хотел бы это
React.createClass({
render: function(){
return (<div>
<Parent>
<button className={
//From Parent Component and not the GrandParent Component
this.props.parentClassName
} />
</Parent>
<div>
)
}
});
вместо этого
React.createClass({
render: function(){
return (<div>
<Parent>
<Button />
</Parent>
<div>
)
}
});
const Button = React.createClass({
render: function(){
return (<button className={this.props.parentClassName} />)
}
});
Если props.parentClassName возвращается из <Parent>
компонента, а не <GrandParent>
компонента.
Я все еще не совсем уверен, в чем проблема, которую вы пытаетесь решить?или как именно вы хотите, чтобы React работал, который отличается от того, как он работает в настоящее время? – rossipedia
Я отредактировал сообщение для ясности – DrivingInsanee
Можете ли вы создать свои компоненты с именами и defaultProps (например, '' var Foo = React.createClass ({defaultProps: ...})) ''? – vbarbarosh