1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Redux学習メモ

Posted at

Reduxとは?

Reduxとは、アプリケーションの状態を管理するためのアーキテクチャパターン。
もしくは上記アーキテクチャパターンを実装するためのライブラリ。

どんな状態を管理するのか?

アプリケーション全体を通して共有したい状態を管理する。
アプリケーションによるということは前提として
例えば「ユーザー情報」「認証情報」「UIの状態」「キャッシュデータ」
「アプリケーションの設定」など。

どうやって状態管理するのか?

  • Reduxではstoreと呼ばれる唯一のオブジェクトに
    アプリケーション全体で共有したい状態を保存する。

  • storeにある状態を更新するためには一つの方法でのみ
    状態を更新することができる。

  • 具体的にはactionをstoreが提供するdispatchメソッドを利用して
    reducerメソッドに渡すことでのみ更新することができる。

画像は公式より

各機能について
名前 説明
store state(状態)が保存されるオブジェクト
action 行う処理の種類が記述されたオブジェクト
dispatch reducerにactionを通知するためのメソッド
reducer 通知されたactionに従ってstateを更新するメソッド

action

export const login = {
    type: 'LOGIN' //actionの種類を定義
}

reducer

import React from 'react'

const isLoginReducer = (state = false, action) => {
    //actionの種類がLOGINだった場合はstateを反転させて更新
    return action.type === 'LOGIN' ? !state : state
}
export const isLoginReducer

store

import { createStore } from 'redux'
//reducerからstoreを作成
const store = createStore(isLoginReducer)

dispatch

import { useDispatch, useSelector } from 'react-redux';
import { login } from './actions';

function App() {
  //dispatchの準備
  const dispatch = useDispatch()
  //storeからstateを参照
  const isLogin = useSelector(state => state.isLogin) 
  return (
    <div className="App">
        //stateの値によって表示を切り替える
        { isLogin ? <h3>Login中</h3> : <h3>未Login</h3> } 
        //イベントが発火したらdispatchでactionを通知
        <button onClick={() => dispatch(login())}>LOGIN</button>
    </div>
  );
}

export default App;

Reduxを利用するメリット

  1. コンポーネントからの「状態」へのアクセスの容易さ
    Reactだけでは複数のコンポーネントで同じ状態を共有したりネストが深い場合
    propsによるバケツリレーが発生し、データの受け渡しが複雑になる。
    Reduxでは単一のstoreがアプリケーション全体で共有したい「状態」を管理しているので、
    各コンポーネントから直接アクセスできるようになる。

  2. コードの可読性向上
    Reduxはactionがdispatchされ、それに応じてstore内の状態が変更されるという、
    単純なデータフローのため、コードの可読性やテストの容易性が向上し、状態の変更を把握しやすくなる。

  3. ミドルウェアの導入による拡張性の向上
    Reduxでは、ミドルウェアを導入することで、アクションのディスパッチと状態の変更の間に
    カスタム処理を挟むことができる。
    このため、非同期処理やロギング、ルーティングなどの機能を拡張することができる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?