この記事では、React と Redux の関係である、react-redux を中心に紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう
私は以前から React 関連のことを調べていて、SPA プロジェクトも手元にあるので、Redux を試す準備ができています。 Redux 自体は React とは関係がありません。これは、アプリの状態管理に使用される一般的な Javascript アプリ モジュールです。 React プロジェクトで Redux を使用するには、react-redux ライブラリを使用して接続することをお勧めします。これは、react-redux を使用しないと、これら 2 つのライブラリが何らかのカプセル化を提供しないことを意味します。コードを整理する科学的な方法により、React コードで Redux をより快適に使用できるようになります。
以前は、Redux ドキュメントを通じてのみ React-redux について学びました。一定期間練習した後、ソース コードを調べて、関連する要約をいくつか作成するつもりです。私が調べているコードの npm バージョンは v4.0.0 です。つまり、使用されている React バージョンは 0.14.x です。
react-redux は、プロバイダーと接続という 2 つの主要なモジュールを提供します。
プロバイダー
プロバイダー このモジュールは、元のアプリコンテナーに基づく追加レイヤーであり、Redux ストアをプロップとして受け入れて追加することです。 context の属性の 1 つとして宣言されているため、サブコンポーネントは contextTypes を宣言した後、 this.context.store を通じてストアに簡単にアクセスできます。ただし、通常、コンポーネントはこれを行う必要はありません。ストアは次の接続のコンテキスト内に配置されます。
これはプロバイダーの使用例です:
// config app root const history = createHistory() const root = ( <Provider store={store} key="provider"> <Router history={history} routes={routes} /> </Provider> ) // render ReactDOM.render( root, document.getElementById('root') )
connect
このモジュールはReduxとReactの間の実際の接続であり、その名前はconnectとも呼ばれます。
まず、Redux がどのように機能するかを考えてみましょう。まず、ストア内で状態が維持され、アクションをディスパッチし、次にリデューサーがこのアクションに基づいて状態を更新します。
React アプリケーションにマッピングされ、ストアで維持される状態がアプリの状態です。React コンポーネントはビュー レイヤーとして機能し、レンダリングとユーザー操作への応答という 2 つのことを行います。したがって、connect は、ストア内の必要なデータを props として React コンポーネントに渡してレンダリングし、アクション クリエーターをラップしてユーザーの操作に応じてアクションをディスパッチすることです。
それでは、connect モジュールの機能を詳しく見てみましょう。その使用方法から始めましょう。その API は次のとおりです:
connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
mapStateToProps は関数であり、戻り値は props にマージする必要がある状態を表します。デフォルト値は () => ({}) で、何も渡されないことを意味します。
(state, props) => ({ }) // 通常会省略第二个参数
mapDispatchToProps は、props のみをマージする必要がある actionCreators を表す関数にすることができます。ここでの actionCreator は、redux の bindingActionCreators 関数を使用することをお勧めします。
(dispatch, props) => ({ // 通常会省略第二个参数 ...bindActionCreators({ ...ResourceActions }, dispatch) })
さらに便利なのは、オブジェクトを直接受け取ることができることです。このとき、connect 関数はそれを関数に変換します。この関数は上記の例とまったく同じです。
mergeProps はマージプロセスをカスタマイズするために使用されます。以下はデフォルトのプロセスです。parentProps の値は、コンポーネントの props に同じ名前が表示される場合、上書きされることがわかります。 。
(stateProps, dispatchProps, parentProps) => ({ ...parentProps, ...stateProps, ...dispatchProps })
オプションには2つのスイッチがあります: pure は最適化をオンにするかどうかを表します。詳細は後述します。デフォルトは true、withRef は内部にパッケージ化されたコンポーネントに参照を与えるために使用されます。この参照は getWrappedInstance メソッドを通じて取得できます。デフォルトは false です。
connect は、React コンポーネントのコンストラクターを接続オブジェクトとして受け入れる関数を返し、最後に接続されたコンポーネントのコンストラクターを返します。
それでは、いくつか質問します:
React コンポーネントはストアの変更にどのように応答しますか?
connect が状態全体を直接渡すのではなく、一部のプロパティを選択的にマージするのはなぜですか?
Pure は何を最適化しますか?
connect Connector によって返される関数を呼び出します。これは、元のコンポーネントのパッケージ化に基づいて、パッケージ化されたコンポーネントによって使用されるように、Redux ストア内の変更も内部的に監視します。ストアの変更に応答できます:
trySubscribe() { if (shouldSubscribe && !this.unsubscribe) { this.unsubscribe = this.store.subscribe(::this.handleChange) this.handleChange() } } handleChange () { this.setState({ storeState: this.store.getState() }) }
ただし、通常、接続するのはコンテナ コンポーネントであり、すべてのアプリの状態を保持するわけではありません。ただし、ハンドラーはすべての状態の変更に応答するため、最適化する必要があるのは次のとおりです。対応する React コンポーネントは、実際に依存している状態の部分が変更された場合にのみ再レンダリングされます。では、実際に依存している部分は何でしょうか。これは、mapStateToProps および mapDispatchToProps を通じて取得されます。
具体的な最適化方法は shouldComponentUpdate をチェックインすることです。コンポーネント自体の props が変更された場合、mapStateToProps の結果が変更された場合、または mapDispatchToProps の結果が変更された場合にのみ shouldComponentUpdate が true を返す場合、チェック方法はshallowEqual を比較することです。
そのため、特定のリデューサーについては次のようになります:
export default (state = {}, action) => { return { ...state } // 返回的是一个新的对象,可能会使组件reRender // return state // 可能不会使得组件reRender }
さらに、接続するときは、不必要なパフォーマンスの損失を避けるために、本当に必要な state または actionCreators を props にマッピングするように注意してください。
最後に、connect API によると、ES7 のデコレーター関数を使用して React ES6 の記述方法に一致させることができることがわかりました。
@connect( state => ({ user: state.user, resource: state.resource }), dispatch => ({ ...bindActionCreators({ loadResource: ResourceActions.load }, dispatch) }) ) export default class Main extends Component { }
以上が、皆さんの参考になれば幸いです。未来。
関連記事:
Angular2でtsファイルのブレークポイントデバッグを実装する方法
以上がReact と Redux での react-redux の接続について (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptは1995年に発信され、Brandon Ikeによって作成され、言語をCに実現しました。 2。JavaScriptのメモリ管理とパフォーマンスの最適化は、C言語に依存しています。 3. C言語のクロスプラットフォーム機能は、さまざまなオペレーティングシステムでJavaScriptを効率的に実行するのに役立ちます。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









