私の現在のリアクトサンプル実装のようなものに見えるレンダリング反応します。そのことは何度も何度も同じことをしています。 ReactChildComponentだけを最終的な配列インデックスに追加する方法がありますか?私はただ一度だけ、配列の最後のインデックスに値を割り当てることができますし、それだけが残っているので、私は毎回、配列を反復処理する必要がないようにPreventが
var MyComponent = React.createClass({
getInitialState: function() {
return {x: []};
},
ComponentWillReceiveProps: function() {
this.state.x.push(this.props.data);
},
render: function() {
var x = this.state.x;
var xl = x. length;
x[xl - 1] = React.createElement(SomeChildComponent, {prop1: val1, prop2: val2});
return (
React.createElement('div', {}, xl));
}
});
:ような何か。私はこれを試しましたが、どういうわけかComponentWillReceiveProps
は呼び出されず、配列は空になります(したがって、長さ1のインデックスを破るコードを選択します)。
これを実装するためのきちんとした方法はありますか?これは良い選択ですか?ほとんどの人は、たいていの場合、最初の例に示すように、map
を使用してループ全体にわたって繰り返しているのです。
私のアプリケーションでは、リアルタイムアプリケーションとして実現できるほどのパフォーマンスを提供しなければならないと想定しているため、毎回アレイを再確認する必要はありません。
こんにちは、ありがとうございました。これはチャットをロードするチャットアプリケーションのセクションであり、前のコンポーネントは変更されないため、新しいコンポーネントのみが追加されます。また、遅延ロードを実装しないで、何千ものメッセージを格納しなければならないとしたら、その解決策は何ですか? – user3271166
最初の質問では、新しいアイテムを読み込むときに、この不変性ヘルパーを使用することをお勧めします:https://github.com/kolodny/immutability-helper。 配列にプッシュするのではなく、毎回新しい配列を作成します。例えば、 'this.setState({array:{array:{'array'、 'with'、 'new '、' items ']}}}) ' これはなぜですか?配列にプッシュするとReactが再びレンダリングされるのではなく、新しい配列を状態として設定するためです。あなたが考えるかもしれないことにもかかわらず、それは実際にパフォーマンスや悪いメモリヒットではありません。 –
2番目の質問では、このシナリオを許可しないでください。ユーザーは自分の画面に一度に多くのチャットアイテムしか置くことができず、100,000のメッセージをスクロールすることは何があってもパフォーマンスに影響します。以前のチャットを読み込んだり、必要に応じて読み込んだりする必要があります。私の推測でさえ、10,000個のメッセージは、アプリケーションの可視領域にないときにDOMにレンダリングしない限り、問題ありません。 –