わかりやすいように例を挙げましたが、基本的には「必要な小道具が足りない」ため、コンソールに警告が表示されます。
小道具はReact.cloneElement
要素に与えられるので、小道具がないという警告が表示されるとは思っていませんでした。 私はこれがエッジケースである可能性があることを理解しています...
https://jsfiddle.net/kdsvgbzu/1/
<A name="name" value="value">
<B></B>
</A>
class A extends React.Component {
render() {
return (
<div>
{React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, {
name: this.props.name,
value: this.props.value
});
}, this)}
</div>
);
}
}
A.propTypes = {
name: PropTypes.string.isRequired,
value: PropTypes.string.isRequired
};
class B extends React.Component {
render() {
return <span>{this.props.name} : {this.props.value}</span>;
}
}
B.propTypes = {
name: PropTypes.string.isRequired,
value: PropTypes.string.isRequired
};
これは意図的なものです。 要素の作成時に小道具を検証すると、より有用なエラーが発生します。 また、Flowなどの静的型システムの動作とより厳密に一致します。 今のところ、これらの小道具をオプションとしてマークするのが最善です。 また、将来的には、コンテキストと呼ばれる機能を導入する可能性があります。これにより、Aのような親からBのような子に小道具を渡すための別のサポートされた方法が提供されます。
私もそう思っていました。 ありがとう@spicyj
あなたの実際のユースケース@tleunenが何であったかはわかりませんが、子供に小道具を渡す責任がある再利用可能なコンポーネントを実装しているときに、この問題に遭遇しました。
ReactDOM.render(
<NumberSelector>
<ComponentRequiringTheNumber />
</NumberSelector>
)
結局、私は、よりエレガントな解決策であることがわかった問題を回避しました。
ReactDOM.render(
<NumberSelector>
{({number}) => <ComponentRequiringTheNumber number={number} />}
</NumberSelector>
)
ComponentRequiringTheNumber
の依存関係が明示的であり、 NumberSelector
の役割が明らかになるので、私はそれがはるかに好きです。 このように、ネストされたコンポーネントに与えられた小道具は、関連する場合にのみ評価されます。
フィドルに適用: https :
最も参考になるコメント
あなたの実際のユースケース@tleunenが何であったかはわかりませんが、子供に小道具を渡す責任がある再利用可能なコンポーネントを実装しているときに、この問題に遭遇しました。
結局、私は、よりエレガントな解決策であることがわかった問題を回避しました。
ComponentRequiringTheNumber
の依存関係が明示的であり、NumberSelector
の役割が明らかになるので、私はそれがはるかに好きです。 このように、ネストされたコンポーネントに与えられた小道具は、関連する場合にのみ評価されます。フィドルに適用: https :