[解決済み] reduxの接続コンポーネントは、どのように再レンダリングするタイミングを知ることができますか?
質問
私はおそらく非常に明白な何かを見逃しているので、自分自身をクリアにしたいと思います。
以下は私の理解です。
素朴なリアクトコンポーネントでは
states
と入力します。
props
. 更新
state
と
setState
はコンポーネント全体を再レンダリングします。
props
はほとんど読み取り専用で、更新しても意味がありません。
reduxストアにサブスクライブするreactコンポーネントでは、以下のような方法で
store.subscribe(render)
のように、reduxストアを購読しているreactコンポーネントでは、ストアが更新されるたびに明らかに再レンダリングが行われます。
react-redux
にはヘルパーの
connect()
として、ステートツリーの一部 (コンポーネントにとって関心のあるもの) とアクションクリエータを注入します。
props
としてコンポーネントに注入します。
const TodoListComponent = connect(
mapStateToProps,
mapDispatchToProps
)(TodoList)
しかし、理解した上で
setState
は必須であり
TodoListComponent
は redux のステートツリーの変更(再レンダリング)に反応するために必要なものですが、私は
state
または
setState
に関連するコードを
TodoList
コンポーネントファイルにあります。それは次のようなものです。
const TodoList = ({ todos, onTodoClick }) => (
<ul>
{todos.map(todo =>
<Todo
key={todo.id}
{...todo}
onClick={() => onTodoClick(todo.id)}
/>
)}
</ul>
)
どなたか、私が何を見落としているのか、正しい方向を示していただけませんか?
追伸:私は redux パッケージにバンドルされている .
どのように解決するのですか?
この
connect
関数は、ストアを購読するラッパーコンポーネントを生成します。 アクションがディスパッチされると、ラッパーコンポーネントのコールバックが通知されます。 そして、あなたの
mapState
関数を実行し
を浅く比較します。
で、今回の結果オブジェクトと前回の結果オブジェクトを比較します(つまり、もしあなたが
を書き換える
を書き換えたとしても、再レンダリングは起こりません)。 もし結果が異なっていれば、その結果をプロップスとして "real" コンポーネント" に渡します。
Dan Abramov が書いた素晴らしい単純化されたバージョンの
connect
で (
connect.js
) で、最適化の作業は示されていませんが、基本的な考え方が示されています。 また、いくつかの記事へのリンクは
Redux のパフォーマンス
に関するいくつかの記事へのリンクもあります。
更新
React-Redux v6.0.0 は、接続されたコンポーネントがストアからデータを受け取る方法について、いくつかの主要な内部変更を行いました。
その一環として、私は投稿を書き、どのように
connect
API とその内部がどのように動作し、時間の経過とともにどのように変化してきたかを説明する記事を書きました。
関連
-
[解決済み】Typescript react - モジュール ''react-materialize'' の宣言ファイルが見つかりませんでした。'path/to/module-name.js' は暗黙のうちに any 型を持ちます。
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] React.createElement: type is invalid -- expected a string.
-
[解決済み] error 'document' is not defined : eslint / React
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] formcontrollabel - material-ui | Reactのデフォルトのtypography classを変更するには?
-
[解決済み] Cross-envでyarnの実行時にenv変数が変更されない。
-
[解決済み] Reduxのアクションをタイムアウトでディスパッチする方法とは?
-
[解決済み】React-ReduxとmapStateToProps()を理解する。)
-
[解決済み] ReduxでmapStateToPropsを使わずにmapDispatchToPropsを使うことはできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Reactを使用したMapBoxのCSSが欠落している件
-
[解決済み] React.createElement: type is invalid -- expected a string.
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] useStateプロパティのフックにmap関数を使用する方法
-
[解決済み] Next.jsでWebSocketを利用する
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] react.jsでng-ifに相当するものは何ですか?
-
[解決済み] アクシオスは定義されていません
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。
-
[解決済み] React JSXのforEach()でHTMLが出力されない