1. redux とは何ですか?React は単なる DOM の抽象化レイヤーであり、Web アプリケーションの完全なソリューションではありません。 React は単なる軽量のビュー レイヤー フレームワークです。大規模なアプリケーションを構築する場合は、ビュー レイヤー フレームワーク Redux と一緒に使用する必要があります。これは主に、複数のインタラクションと複数のデータ ソースがあるシナリオで使用されます。使用する必要はありませんが、使用方法を知っておく必要があります。 2. 還元の原則まず、Reduxの原理を分かりやすい図で説明します。 まず、ユーザーがアクションを発行します。 store.dispatch(アクション); 次に、Store は自動的に Reducer を呼び出し、現在の State と受信した Action の 2 つのパラメータを渡します。 Reducer は新しい状態を返します。 次の状態を todoApp(前の状態、アクション) とします。 状態が変化すると、Store はリスニング関数を呼び出します。 //リスニング関数を設定します store.subscribe(listener); リスナーは store.getState() を通じて現在の状態を取得できます。 React を使用している場合、これによりビューの再レンダリングがトリガーされる可能性があります。 関数リスナー() { newState を store.getState() に格納します。 コンポーネントを新しい状態に設定します。 } 3. redux の使い方は?(1)reduxをインストールし、reduxフォルダを作成し、store.jsを作成するこのファイルは、ストア オブジェクトを公開するために特に使用されます。アプリケーション全体には、ストア オブジェクトが 1 つだけあります。 redux をインストール: //createStore を導入します。これは、redux でコア ストア オブジェクトを作成するために特に使用されます。import {createStore, applyMiddleware} from 'redux' //Countコンポーネントを提供するリデューサーを導入する './count_reducer' から countReducer をインポートします。 //非同期アクションをサポートするためにredux-thunkを導入する 'redux-thunk' から thunk をインポートします //ストアを公開する //applyMiddlewareはthunkを使用した中間位置です デフォルトのcreateStoreをエクスポートします(countReducer、applyMiddleware(thunk)) (2)reducers.jsを作成する
const initState = 0 //初期化状態エクスポートデフォルト関数countReducer(preState=initState,action){ // コンソールログ(preState); //アクションオブジェクトから取得: タイプ、データ const {type,data} = アクション //型に基づいてデータの処理方法を決定する switch (type) { case 'increment': // 追加する場合は、preState + data を返す case 'decrement': //減少の場合はpreState - dataを返す デフォルト: preState を返す } } (3)store.subscribeを導入する主にサブスクライブを使用してストア内の各変更を監視します // パブリックindex.js './redux/store' からストアをインポートします。 //subscribeはストア内のデータが変更されたときにデータを更新します。ここに記述すると、グローバルstore.subscribe(()=>{ ReactDOM.render(<App/>,document.getElementById('root')) }) (4) react-reduxの紹介react-redux は、redux の作者によってカプセル化されたライブラリです。これは、Redux をさらに簡素化し、いくつかの追加 API (Provider、connect など) を提供するサードパーティ モジュールです。これを使用すると、コードをより適切に整理および管理でき、React で Redux をより便利に使用できるようになります。 カウントファイルを作成する //Count UI コンポーネントをインポートします import CountUI from '../../components/Count' //UIコンポーネントとreduxを接続するためのconnectを導入する 'react-redux' から {connect} をインポートします ----------------------------------------------------------- /* 1. mapStateToProps 関数はオブジェクトを返します。 2. 返されたオブジェクトのキーはUIコンポーネントのpropsに渡されるキーとして使用され、値はUIコンポーネントのpropsに渡される値として使用されます。 3.mapStateToPropsは状態を渡すために使用されます*/ 関数 mapStateToProps(状態){ {count:state} を返す } ----------------------------------------------------------------- /* 1. mapDispatchToProps 関数はオブジェクトを返します。 2. 返されたオブジェクトのキーはUIコンポーネントのpropsに渡されるキーとして使用され、値はUIコンポーネントのpropsに渡される値として使用されます。 3.mapDispatchToPropsは操作ステータスメソッドを渡すために使用されます*/ 関数 mapDispatchToProps(dispatch){ 戻る { jia:number => ディスパッチ(createIncrementAction(number))、 jian:number => ディスパッチ(createDecrementAction(number))、 jiaAsync:(数値、時間) => ディスパッチ(createIncrementAsyncAction(数値、時間))、 } } // connect()() を使用して Count コンテナ コンポーネントを作成して公開します export default connect(mapStateToProps,mapDispatchToProps)(CountUI) //エクスポートのデフォルト接続の改善( 状態 => ({count:state}), //mapDispatchToPropsの一般的な記述 /* dispatch => ({ jia:number => ディスパッチ(createIncrementAction(number))、 jian:number => ディスパッチ(createDecrementAction(number))、 jiaAsync:(数値、時間) => ディスパッチ(createIncrementAsyncAction(数値、時間))、 }) */ //mapDispatchToProps の省略形 { jia:createIncrementAction、 jian:createDecrementAction、 jiaAsync:createIncrementAsyncAction、 } )(カウント) アクションオブジェクトを生成し、個別に公開する /* このファイルは、Count コンポーネントのアクション オブジェクトを生成するために特に使用されます*/ '../constant' から {INCREMENT,DECREMENT} をインポートします //同期アクションとは、アクションの値が Object 型の一般的なオブジェクトであることを意味します。export const increment = data => ({type:INCREMENT,data}) エクスポート const decrement = data => ({type:DECREMENT,data}) // 非同期アクションとは、アクションの値が関数であることを意味します。非同期アクションは通常、同期アクションを呼び出しますが、非同期アクションは必須ではありません。 エクスポート const incrementAsync = (データ、時間) => { 戻り値 (ディスパッチ) =>{ タイムアウトを設定します(()=>{ ディスパッチ(増分(データ)) }、時間) } } これで、redux の動作原理と使用法に関するこの記事は終了です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援して頂ければ幸いです。 以下もご興味があるかもしれません:
|
<<: フォーム要素の簡単な実装コードでは登録を例に挙げています
>>: SQL IDENTITY_INSERT ケーススタディ
序文実際、クエリ中に結果に番号が付けられるこのような状況に遭遇したことは一度もありません。同僚が転職...
私は最近新しい会社に入社したのですが、データベース設計にいくつか小さな問題があることに気付きました。...
1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...
今日、小さなプログラムを書いていたときに、スクロールビューを使用したのですが、スクロールビュー内のテ...
1. 遅いクエリログ1.1 MySQL ログの種類ログは、データベースの操作や、ユーザーがデータベー...
テーブルを素早くコピーする方法まず、テーブル db1.t を作成し、1000 行のデータを挿入します...
テーブルの作成とインデックスの作成 テーブルtbl1を作成( id int ユニーク、sname v...
まず、yumを使ってCentOSにPHPをインストールする方法を紹介します。 1. PHPのyumソ...
チームは新しいフレームを交換しました。すべての新しいビジネスでは、新しいフレームワークと新しいデータ...
最近、VMware 仮想マシンで CentOS を試していたのですが、インストール後にインターネット...
発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...
目次1. v-bind: 要素の属性にデータをバインドできる2. v-bind: は次のように省略で...
<br />どの家庭にもそれぞれの問題があり、改訂はどの IT 企業にとっても問題の 1...
みなさんこんにちは。私は梁旭です。 Linux を使用しているときに、いくつかのコマンドを連結する必...
次のように、Win10でMysqlの解凍バージョンをインストールします。環境: win10 64ビッ...