Reactの子孫コンポーネントに小道具を渡すための推奨パターンはありますか?
以下では、prop _callback
を子コンポーネントに渡します。
Master = React.createClass({
render: function() {
return (
<div>
<ListComp items={this.props.items} callback={this.handleClick} />
</div>
);
}
});
ListComp = React.createClass({
render: function() {
this.props.items.forEach(function(item) {
items.Push(<ItemView item={item} callback={this.props.callback} />);
}, this);
return (
<ul>{items}</ul>
);
}
});
次に、callback
プロップが子孫コンポーネントに渡されます。
ItemComp = React.createClass({
render: function() {
return (
<li><a onClick={this.handleClick} href="#">Link</a></li>
);
},
handleClick: function(e) {
e.preventDefault();
this.props.callback();
}
});
このようにプロップを2回渡すのは正しいですか、それとも継承を何らかの形で参照する必要がありますか?
ドキュメントにtransferPropsTo
メソッドがあり、ログに記録すると、子孫からthis.props.__owner__.props
を介してcallback
にアクセスできるように見えますが、これらのダブルダブルアンダースコアによって、ない.
はい、これは慣用的です。各コンポーネントは、引数が小道具である関数と考えてください。その観点から、小道具を明示的に渡すことは、はるかに正常に思えます。コンポーネントへのすべての入力が何であるか、正確に何を渡しているかを確認できるように、すべてを明示的にすることにより、保守が容易になることがわかりました。
(Reactの将来のバージョンには、暗黙的に物事を伝えることを可能にする「コンテキスト」と呼ばれる機能が含まれる可能性があります。ほとんどの場合、明示的です。)
[〜#〜] update [〜#〜](元の作者によるものではありません)
ドキュメントがついに追加されました(おそらくリリース0.14で、2015年夏から2016年夏の間に追加されました)。
これも方法です react-redux
は、階層を介したストアの受け渡しを簡素化します。