プログラミングマガジン

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

  • ホーム
  • Redux
  • 【React/Redux】「Redux Tool Kit」で非同期のSliceを作る場合、…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【React/Redux】「Redux Tool Kit」で非同期のSliceを作る場合、builderオブジェクト

05.23

  • miyabisan2
  • コメントを書く

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

Reduxで非同期の場合のSliceの作り方は下記のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import axios from 'axios';
 
// Sliceの外でフェッチするメソッドは記述するように推奨されている。
export const fetchAsyncGet = createAsyncThunk('fetch/get', async () => {
  const res = await axios.get('APIのエンドポイントURL');
  return res.data;
});
 
const fetchSlice = createSlice({
  name: 'fetch',
  initialState: { tasks: [] },
  reducers: {},
  extraReducers: (builder) => {
    builder.addCase(fetchAsyncGet.fulfilled, (state, action) => {
      return {
        ...state,
        tasks: action.payload,
      };
    });
  },
});
export const selectTasks = (state) => state.fetch.tasks;
export default fetchSlice.reducer;

createAsyncThunk

従来のreduxだとredux-thunkなどのミドルウェアで行っていた物がRedux Tool Kit標準機能でまかなえるようになりました。

なお、Sliceの外にメソッドを記述することが推奨されています。

1
createAsyncThunk('アクションの名前',非同期関数)

引数

引数 説明
アクションの名前 「スライスの名前/メソッド名」(fetch/postなど)という命名規則がよく使われます。
非同期関数 async/awaitなどで非同期の関数を指定します。

戻り値

3つのステータスのどれかを返してくれます。

ステータス 説明
 pending
処理中
fulfilled 正常終了したことを示します。
rejected 異常終了

extraReducers

非同期関数を扱う場合は、通常のreducersではなくextraReducersというものを使います。

1
2
3
  extraReducers: (builder) => {
    builder.addCase(アクション:createAsyncThunkで定義したメソッド.createAsyncThunkのステータス, reducerの処理);
  },

builder.addCase

createAsyncThunkで定義したメソッドのステータスによって処理させたい処理内容を記述します。

action.payload

非同期処理の場合は、createAsyncThunkで定義したメソッドのreturnした値がaction.payloadに入ります。

builderオブジェクトとは?

actionごとのreducerを生成する仕組み。基本的に、プログラミング言語のcase文と似たような感じのメソッドが用意されています。

メソッド

ちなみに、必ず「addCase → addMatcher → addDefaultCase」の順に記述しなければならないので注意しましょう。

addCase

特定のaction typeのreducerを実装する際に使います。

第一引数

action type文字列 または createActionで生成されたaction Creator。

第二引数

第一引数のactionに対するreducer関数

addMatcher

ある条件に該当するaction typeのreducerを実装する際に使います。(例えば、xxxという文字列を含むaction typeのみ実行するなど)

第一引数

matcher関数

第二引数

第一引数のactionに対するreducer関数

addDefaultCase

addCaseでもaddMatcherにも該当しなかったaction typeのReducerを実装する際に使います。

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

関連記事

  1. 2021 06.20

    【JavaScript】「APIモックライブラリ」の比較

  2. 2022 02.11

    【Redux】Redux Tool Kitの「Reducer」のテスト

  3. 2022 10.08

    【Next.js】「Hasura」と「Apollo Client」の連携

  4. 2021 02.11

    【React】「React-Testing-Library」について

  5. 2022 03.06

    【React】「CSSの選択肢」(Pure CSS、CSS Modules、CSS in JSなど)

  6. 2021 02.14

    【Redux】「redux-saga」で非同期処理

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

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

返信をキャンセルする。

【TypeScript】「as」、「any」、「?」、…

【React】パフォーマンス改善対策、レンダリングの仕…

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 ©  プログラミングマガジン | プライバシーポリシー