2017-07-06 5 views
2

私は自分のReactフォームで制御されたコンポーネントを使用しています。私の懸念事項は、ユーザーが長いテキストを入力できる入力フィールドです。制御されたコンポーネントに関するメモリの使用

状態管理にReduxを使用しているため、状態は変更できません。 「!いくつかの記述を」だから、私は、入力した場合、説明フィールドに、私の再来ストアに保管されている状態値は以下のとおりです。

S 
So 
Som 
Some 
Some 
Some d 
Some de 
[and so on] 

ユーザのセッションのライフタイムでは、メモリ使用量ことができますこれらのフォームフィールドのすべての以前の状態を保存するだけで少し重くなります。これは特に、限られたシステムリソースを持つモバイルデバイスに関するものです。

私のreduxストアのメモリ消費を管理するには良い戦略はありますか?店の一部を洗い流す方法はありますか?私はすべてを一掃したくないが、制御された方法で一部の部品を洗い流すことができれば有益だろう。

+0

Reduxが現在の値に加えてすべての以前の値を保持していると言っていますか、それを行うコードはありますか? –

+0

果物がぶら下がっていると、 'onChange'イベントにdebounceが追加されます。理想的ではありませんが、あなたが探しているようなガベージコレクタがない場合は役に立ちます。 –

+0

これらの場合にアクションを呼び出す前に 'setTimeout'を使用することができます。そのため、ユーザーが文字を押すたびにアクションを呼び出す必要はありません。私は答えの例を挙げます。 – Manolo

答えて

2

Reduxの仕組みや不変なデータ更新の仕組みについて誤解しています。 Reduxは、デフォルトで状態ツリーまたはアクションの以前のバージョンを保持しません。 Redux DevToolsは、特定の数の以前のアクションと結果としての状態ツリーを追跡しますが、開発中のみです。参照されなくなったオブジェクトは、JSガベージコレクタによってクリーンアップされます。

詳細についてはhttp://redux.js.org/docs/faq/Performance.html#performance-state-memory,Is there any way to "commit" the state in Redux to free memory?ngredux state with big data collection, memory concernsを参照してください。

+0

少し混乱していますが、これは啓発されています。 'Object.assign'を使って状態を変更しないようにすると、以前の状態は削除され、現在の状態だけが保持されますか? – Sam

+1

Reduxは 'currentState'変数がルートステートツリーオブジェクトを指していないので、GC'dを取得します(アプリケーションの他の部分はそれを参照していないと仮定します)。新しい状態ツリーが再利用しない古い状態ツリーの部分もGC'dになります。 – markerikson

関連する問題