最初にこのスレッドについて知りたい:React onClick event on componentReact、前記コンポーネント内のレンダリング要素ではなく、コンポーネントにonClickイベントを直接追加する。
これをReact Componentに直接行う方法はありませんか?それはスレッドで答えられるようには思われませんでした。私はどのように攻撃された機能をレイヤーに追加することができるのかを知っていますが、それはより脆いIMOになる余分な接続コードです。 ListItemレベルへの変更は、相互接続に加えなければなりません。マスター状態に戻ろうとするnThレベルの子コンポーネントであれば、これはさらに悪化すると思います。
私の場合
Parent->リスト - >のListItem
私は、リストの要素のクリックイベントが親の機能を起動しておく必要があります。私はListItemコンポーネントをクリックし、そのonClickイベントをParentに戻して、兄弟コンポーネントのリストをトリガーするように状態を更新することができるようにしたいと思います。リストには多くの定型文を削除しました。
親コンポーネントがすべてをラップします。これは、私がレンダリングビューを更新するために状態を使用しているところです。
var Parent = React.createClass({
updateState:function(newCurrent){
this.setState({current: newCurrent});
},
render: function() {
return (
<div className="Parent" >
<Current this.state.current />
<List
list={this.state.list}
updateCurrentVideo={this.updateCurrentVideo} />
</div>
);
}
});
ここに一覧がリスト要素は開始時に説明し、私は状態を更新するために戻って親までそのデータを渡し、それぞれのListItem TIにonClickイベントを添付したいです。
このようなイベントをコンポネントの内側に付ける代わりに、トリガを渡す必要はありません。 ListItem-> List-> Parent()。 Listの子を介してi.mapしながらリスナーをアタッチするといいでしょう。
var List = React.createClass({
render: function() {
var list = this.props.list.map(function(item,index){
return (
<ListItem
onClick={() => this.props.updateState(item) } />
)
}.bind(this));
return (
<div className="List">
{list}
</div>
);
}
});
コンポーネントレベルで添付されたonClickは、実際に何もしないようです。しかし、私はそれをこのように変更し、コールバック関数を持つListItemに小道具を渡すと、それは魔法のように動作します。だから私は私の大きな疑問に思う。
var ListVideos = React.createClass({
handleClick:function(data){
this.props.updateCurrentVideo(data)
},
render: function() {
var list = this.props.list.map(function(item,index){
return (
<ListItem
handleClick={this.handleClick(item) } />
)
}.bind(this));
return (
<div className="List">
{list}
</div>
);
}
});
そして私はあなたが求めているものを理解していればのListItem
var ListItem = React.createClass({
render: function() {
return (
<div className="ListItem" onClick={this.props.handleClick}>
// STUFF
</div>
);
}
});
は、あなたがこの要件をスカートできるように反応します。 –
それは基本的には私の質問です。あなたの小道具を全部下にしてバックアップする必要がない良い方法があるかどうかを尋ねる。 –
^@BrianShotolaは文脈を使うのは、*非常に*特定の場合にのみ使われるべきで、かなり実験的な機能です。おそらく、あなたのアプリが流通のために複雑であるか、または小道具を介して機能を渡すかどうかを検討する方が良いでしょう。 – markthethomas