プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Redux
  • 【redux】redux-thunk
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【redux】redux-thunk

01.24

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

redux-thunkとは?

actionCreatorで関数を返せるようになる。

非常にシンプルで、ActionCreater内部のロジックで非同期処理を実行できます。通常、ActionCreatorはピュアなオブジェクトを返さないといけないので非同期処理を書くのは不可能なのですが、redux-thunkを使えばそれが実現できます。

実際に、redux-thunkのreadmeのMotivationにも書かれていますが、「actioncreatorをアクション(オブジェクト)の代わりに関数を返す」ように実装できると書かれています。

actionCreatorで返す関数の引数にdispatchやgetStateを持たせることができる。

actionCreatorで関数を返せるようになりますが、その返す関数の引数としてdispatchやgetStateを持たせることができます。なので、actionCreator側でdispatchさせることが可能になります。

ただ、非常に自由度が高いのでうまく考えないとfatなアクションになってしまうので注意。

インストール

redux-thunkはreduxで非同期処理を実装するためのパッケージになります。

1
yarn add redux-thunk

組み込み

reactであれば「src/index.js」などに下記のように記述します。

1
2
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';

redux-thunkはミドルウェアになるのでミドルウェアを適用するためのreduxの関数であるapplyMiddlewareもimportする必要があります。createStoreメソッドの第二引数に指定します。

1
const store = createStore(reducer, applyMiddleware(thunk))

こうすることでReduxのStoreの中に非同期処理が組み込まれます。

actionsへの組み込み

非同期処理の場合は、dispatchの呼び出しを「コンポーネント側」ではなく「actionCreatorで返す関数側」で行なっているというわけですね。

1
2
3
4
5
6
7
8
9
10
import axios from 'axios'
export const READ_EVENTS = 'READ_EVENTS'
 
const ROOT_URL = 'https://xxx.com/api/v1'
const QUERYSTRING = '?token=token123'
 
export const readEvents = () => async dispatch => {
  const response = await axios.get(`${ROOT_URL}/events${QUERYSTRING}`)
  dispatch({ type: 'READ_EVENTS', response })
}

なぜreduxでは「redux thunk」や、「redux saga」などのライブラリが必要なのか。

ReduxはAction Creatorによって生成されたアクションをStoreにディスパッチすることで単純な更新を行っているためです。そこで、Redux-thunkのようなミドルウェアを導入することでStoreの機能を拡張して、非同期ロジックを記述することが可能になります。

Redux Thunk

通常、Action CreatorはActionオブジェクトを返すが、Redux Thunkを使用すると「Thunk」という関数を返すようにできます。これによりActionのディスパッチを遅らせたり、特定の条件が満たされた場合のみディスパッチをするということができるようになります。

Action CreatorがThunkを返すことで、ReduxのReducer、Reactのコンポーネントに直接的な副作用を起こさないピュアな状態を保つことができます。(こうすることで、ReducerやReactコンポーネントのテスト、保守性、拡張性、再利用性などを高めることが可能になります。)

返す関数

返す関数の引数としてdispatchやgetStateを持たせることができるので、actionCreator側でディスパッチができるようになります。

Redux Thunkの欠点

Action Creator側に非同期な処理を記述することになるので、Action Creatorが肥大化しやすくなります。

Redux Saga

Redux ThunkのようにAction Creatorが肥大化してしまうようなアプリケーションではこちらを使うようにします。

スポンサーリンク
  • 2021 01.24
  • miyabisan2
  • コメントを書く
  • React, Redux
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 07.23

    【React/Redux】「Presentational Component」と「Container Component」、「HOC」

  2. 2021 05.30

    【React】「React Query」について

  3. 2021 05.02

    【React/Redux】よく使われるライブラリ一覧(redux-tool-kit、redux-form、reselectなど)

  4. 2023 09.28

    StoryBookの基本

  5. 2022 11.09

    【React】「Material-UI」のデザイン手法(Theme、Box、Container、Typographyなど)

  6. 2021 02.11

    【React】props、「モック」を使ったテスト、React Hooksのテスト

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【React】「props」について

【React】「ライフサイクル」や「フック(Hooks…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー