ここ数週間、Facebook フレームワークの React.js と Backbone を一緒に使用してきましたが、Backbone コレクションに変更があった場合に React コンポーネントを再レンダリングする最も適切な方法が何であるかはまだ完全にはわかりません。 propとして渡されました。
現在私がしていることは、コレクションにリスナーcomponenentWillMount
を設定しchange/add/remove
、トリガー時に状態を設定することです。
componentWillMount: function(){
var myCollection = this.props.myCollection;
var updateState = function(){
this.setState({myCollection: myCollection.models});
}
myCollections.on("add remove", updateState, this);
updateState();
}
render: function(){
var listItems = this.state.myCollection.map(function(item){
return <li>{item.get("someAttr")}</li>;
});
return <ul>{listItems}</ul>;
}
モデルが状態に複製される例を見てきました:
var updateState = function () {
this.setState({ myCollection: _.clone(this.myCollection.models) });
};
小道具のモデル/コレクションが状態を使用する代わりにレンダリングで直接使用され、コレクション/モデルが変更されたときに forceUpdate が呼び出され、コンポーネントが再レンダリングされるバリアントも見ました。
componentWillMount: function(){
var myCollection = this.props.myCollection;
myCollections.on("add remove", this.forceUpdate, this);
}
render: function(){
var listItems = this.props.myCollection.map(function(item){
return <li>{item.get("someAttr")}</li>;
});
return <ul>{listItems}</ul>;
}
さまざまなアプローチにはどのような利点と欠点がありますか? Reactの方法でそれを行う方法はありますか?