0
新しいインスタンスを作成する代わりにストアドバージョンを使用できるように、各インスタンスのインスタンスをチェックしてチェックしたいのですが、どのようにリストをチェックするためにリストを保持することができますか?React状態を使用して、すでにインスタンス化されたオブジェクトのリストを管理しますか?
サンプルコード:
export default React.createBackboneClass({
getInitialState() {
return {
data: [],
groups: {}
}
},
componentWillMount() {
this.setState({
data: this.props.collection
});
},
render() {
const gridGroups = this.state.data.map((model) => {
let gridGroupsCollection = null;
if(this.state.groups[model.get('id')]) {
gridGroupsCollection = this.state.groups[model.get('id')];
} else {
gridGroupsCollection = this.state.groups[model.get('id')] = new GridGroupCollection([], {
groupId: model.get('id')
});
this.setState((previous) => {
groups: _.extend({}, previous, gridGroupsCollection)
});
}
return <GridGroupComponent
key={model.get('id')}
name={model.get('n')}
collection={gridGroupsCollection} />
});
return (
<div>
{gridGroups}
</div>
);
}
});
返事に感謝が、私は原因レンダリングの状態を設定するには、エラーを取得する - 警告:
更新
This TodoMVC exampleは反応し結合し、バックボーンする方法の方向にあなたを指している可能性があります.js:36警告:setState(...):既存の状態遷移( 'render'や他のコンポーネントのコンストラクタ内など)中には更新できません。レンダリング方法は、小道具と州の純粋な機能でなければなりません。コンストラクタの副作用はアンチパターンですが、 'componentWillMount'に移動することができます。 – styler
これは、renderメソッドのsetStateの呼び出しが無限ループを開始するために必要です。レンダリングメソッドの状態を変更して無限ループを開始すると、状態が変更されるとレンダリングが自動的に呼び出されます。 – Guy
ねえ、これを修正するにはどうすればthis.getCachedGridGroupCollectionは基本的にやっているのですか? – styler