Reduxの反応による理解


これは私の以前の私の以前のシーケンスでは、分離の問題を解決し、コンテキストAPIで解決することができない解決の問題です.深さのreduxの重要性を理解する.here 優秀品です.

Reduxで反応を使う方法
Reduxは、ストアの作成、ミドルウェア&還元ロジックを扱います.Responseでそれを使用するために、我々はプロバイダー(Context APIを使用して)で利用可能にされるすべての構成要素のためにRedux Storeのインスタンスを必要とします.ためには、状態から、我々は反応Reduxパッケージからの接続を使用することができますストアからメソッドを派遣する.Redux 7.0以降では、MapStateToPropsとMapDispatchToPropsを使用してコンポーネントをラップするのではなく、useselectorとusedispatchフックを使用できます.

反応/Reduxプロジェクトを構築しましょう
私たちは、これで議論されたプロジェクトを構築し続けるつもりですが、今回は、反応UIも構築します.
プロジェクトには2種類のアカウントのUIがあります.また、銀行顧客のリストがあります.

始めるには依存関係の下にインストールする必要があります.

プロジェクトのディレクトリ構造は次のようになります.

で、我々はすでにどのようにセットアップのアクションクリエイター、減速機と組み合わせることを見ている減速機.
ここではreduxストアのようになります.
import { createStore, applyMiddleware } from "redux";
import { composeWithDevTools } from "redux-devtools-extension";
import thunk from "redux-thunk";
import logger from "redux-logger";
import rootReducer from "./rootReducer";

const store = createStore(
  rootReducer,
  composeWithDevTools(applyMiddleware(logger, thunk))
);

export default store;
storeインスタンスは、プロバイダを介してコンポーネントツリーを渡されます
import { Provider } from "react-redux";
import store from "./redux/store";

export default function App() {
  return (
    <Provider store={store}>
      <div className="App">   
      ...    
      </div>
    </Provider>
  );
}
ストアを購読するには、useselectorフックを使用し、usedispatchフックを必要とするディスパッチ機能を取得します.以前connect 機能は、typescriptでセットアップをするのが困難でした、しかし、現在これらのフックは簡単なTS統合を提供します.
export default CurrentAccounts = () => {
  const amount = useSelector((state) => state.current.amount);
  const dispatch = useDispatch();

  return (
    <div>
      <label>Current Account</label>
      <h3>{amount}</h3>
      <div>
        <button onClick={() => dispatch(withdrawMoneyCurrent())}>
          Withdraw
        </button>
        <button onClick={() => dispatch(depositMoneyCurrent())}>Depoist</button>
      </div>
    </div>
  );
};
非同期アクション
我々は、データを取得するための読み込み、成功、エラー状態の場合の動作でディスパッチ機能を呼び出すためにredux thunkを使用している.
export const fetchCurrentUsers = () => {
  return function (dispatch) {
    dispatch(fetchStatusLoading);
    axios
      .get("https://jsonplaceholder.typicode.com/users")
      .then((res) => {
        const data = res.data.map((item) => ({ id: item.id, name: item.name }));
        dispatch(fetchStatusSuccess(data));
      })
      .catch((error) => {
        dispatch(fetchSatusError(error.message));
      });
  };
};

👇 ここでは、上記の概念を実践する完全なサンドボックスです
そしてもしあなたがRedux Dev Tools Chromeの拡張機能を使用すると、状態遷移、ディスパッチカスタム機能を再生し、テストを生成することができます.

あなたがデータを取得し、集中化されたストアに保存するReduxを使用している場合は、より効率的なキャッシュのパフォーマンスと少ないコードでそれを行う別の方法がありますRedux Query . ダンのblog ときにreduxを使用しない場合も読む価値があります.