私は小さな例をやって Facebook React を学んでいます。バインディングに関する私の知識this
が大丈夫かどうかを確認することにしたのでReact.class
、変更可能な状態が親にあり、中間のみがコールバックを子に渡して操作する 3 つを作成しました。
基本構造:
- MainFrame (states here)
- FriendBox (only pass the callbacks for change states to Friend)
-Friend
私が使用できるよりも注意してくださいtransferThisProp
。実際には、これを「手動で」作成することを好みました。
FriendBox render には以下が含まれます:
var allFriends = this.props.friends.map((function (f) {
return(
<Friend key = {f.id}
name = {f.name}
select = {this.props.select}
/>
)
}).bind(this))
Friend render には以下が含まれます:
return(
<div className="friend">
{this.props.name}
<a href="" onClick={this.props.select(this.props.key)}>
select
</a>
</div>
)
コードを実行すると、次のメッセージが表示されます。
MainFrame.sendToFriendH:
Invariant Violation: receiveComponent(...):
Can only update a mounted component. react.js:7276
Uncaught Error: Invariant Violation:
receiveComponent(...): Can only update a mounted component.
興味深い点は、chrome の react 拡張機能を使用すると、仮想DOM
が適切でバインディングが適切であることを確認できることです。Friend
最初の要素の子コンポーネントが言うことを除いて、すべてがうまく見えます_lifeCycleState: "UNMOUNTED"
これは、一番下の子がレンダリングされずにマウントされていないという間違いをしているよりも考えさせられました。すべてのコードが失敗しますが、正確な理由はわかりません。要素が自動的にマウントされない理由と、それを修正するにはどうすればよいですか?
完全なコード: http://jsfiddle.net/RvjeQ/