0
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?

REACT Redux ②ReduxのAPI紹介

Posted at

Redux の主要な API および概念について、以下に詳しく説明します。

1. createStore

createStore は、Redux ストアを作成するための関数です。3 つの引数を取ります:reducer、preloadedState、enhancer。preloadedState は初期状態を設定し、enhancer はストアを拡張するための関数です。

使用例:

import { createStore } from 'redux';
import rootReducer from './reducers';

const store = createStore(rootReducer);

引数:

・reducer:状態を更新するための関数。
・preloadedState:初期状態(オプション)。
・enhancer:ストアの機能を拡張するための関数(オプション)。

2. combineReducers

combineReducers は複数の reducer を組み合わせて、1 つのルート reducer を作成するためのヘルパー関数です。各サブ reducer がアプリケーション状態の一部を管理します。

使用例:

import { combineReducers } from 'redux';
import userReducer from './userReducer';
import postsReducer from './postsReducer';

const rootReducer = combineReducers({
  user: userReducer,
  posts: postsReducer
});

export default rootReducer;

3. applyMiddleware

applyMiddleware は、ストアの機能を拡張するための関数です。ミドルウェア(例えば redux-thunk や redux-saga)をストアに適用することができます。

使用例:

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';

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

4. bindActionCreators

bindActionCreators は、アクションクリエーター関数を dispatch 関数にバインドするためのヘルパー関数です。これにより、dispatch を明示的に呼び出さずにアクションをディスパッチできます。

使用例:

import { bindActionCreators } from 'redux';
import { addTodo, removeTodo } from './actions';

const mapDispatchToProps = (dispatch) => {
  return bindActionCreators({ addTodo, removeTodo }, dispatch);
};

5. connect

connect は、React-Redux が提供する関数で、React コンポーネントを Redux ストアに接続するために使用します。2 つの引数、mapStateToProps と mapDispatchToProps を取ります。

使用例:

import { connect } from 'react-redux';
import { addTodo } from './actions';
import TodoList from './TodoList';

const mapStateToProps = (state) => ({
  todos: state.todos
});

const mapDispatchToProps = (dispatch) => ({
  addTodo: (todo) => dispatch(addTodo(todo))
});

export default connect(mapStateToProps, mapDispatchToProps)(TodoList);

6. Provider

Provider は React-Redux が提供するコンポーネントで、Redux ストアを React アプリケーションの全コンポーネントに提供します。

使用例:

import { Provider } from 'react-redux';
import { createStore } from 'redux';
import rootReducer from './reducers';
import App from './App';

const store = createStore(rootReducer);

const Root = () => (
  <Provider store={store}>
    <App />
  </Provider>
);

export default Root;

7. dispatch

dispatch は、Redux ストアのメソッドで、アクションをディスパッチするために使用します。dispatch を呼び出すと、reducer が呼び出されて状態が更新されます。

使用例:

store.dispatch({ type: 'ADD_TODO', payload: { text: 'Learn Redux' } });

8. getState

getState は、Redux ストアのメソッドで、現在の状態を取得するために使用します。

使用例:

const currentState = store.getState();
console.log(currentState);

9. subscribe

subscribe は、Redux ストアのメソッドで、ストアの更新をリッスンするためのリスナーを追加します。

使用例:

const unsubscribe = store.subscribe(() => {
  console.log('State updated:', store.getState());
});

// 購読の解除
unsubscribe();

10. replaceReducer

replaceReducer は、Redux ストアのメソッドで、現在の reducer を動的に置き換えるために使用します。

使用例:

store.replaceReducer(newReducer);

11. compose

compose は、複数の関数を組み合わせて 1 つの関数にするための関数です。通常、applyMiddleware と一緒に使用され、ストアの機能を拡張します。

使用例:

import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';

const store = createStore(
  rootReducer,
  compose(
    applyMiddleware(thunk),
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
  )
);

12. createSlice (Redux Toolkit)

createSlice は、Redux Toolkit が提供する API で、reducer とアクションクリエーターを簡単に作成できます。Redux スライスをより簡潔に定義することができます。

使用例:

import { createSlice } from '@reduxjs/toolkit';

const todoSlice = createSlice({
  name: 'todos',
  initialState: [],
  reducers: {
    addTodo: (state, action) => {
      state.push(action.payload);
    },
    removeTodo: (state, action) => {
      return state.filter(todo => todo.id !== action.payload.id);
    }
  }
});

export const { addTodo, removeTodo } = todoSlice.actions;
export default todoSlice.reducer;

13. createAsyncThunk (Redux Toolkit)

createAsyncThunk は、Redux Toolkit が提供する API で、非同期操作を処理します。非同期リクエストを簡単に扱い、pending、fulfilled、rejected の各状態に応じたアクションを自動的に生成します。

使用例:

import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';

export const fetchTodos = createAsyncThunk(
  'todos/fetchTodos',
  async () => {
    const response = await fetch('/api/todos');
    return response.json();
  }
);

const todoSlice = createSlice({
  name: 'todos',
  initialState: { items: [], status: 'idle' },
  reducers: {},
  extraReducers: (builder) => {
    builder
      .addCase(fetchTodos.pending, (state) => {
        state.status = 'loading';
      })
      .addCase(fetchTodos.fulfilled, (state, action) => {
        state.status = 'succeeded';
        state.items = action.payload;
      })
      .addCase(fetchTodos.rejected, (state) => {
        state.status = 'failed';
      });
  }
});

export default todoSlice.reducer;

14. createReducer (Redux Toolkit)

createReducer は、Redux Toolkit が提供する API で、reducer の作成を簡素化します。immer ライブラリを使って、不変のデータ構造を扱うのが特徴です。

使用例:

import { createReducer } from '@reduxjs/toolkit';
import { addTodo, removeTodo } from './actions';

const initialState = [];

const todosReducer = createReducer(initialState, {
  [addTodo]: (state, action) => {
    state.push(action.payload);
  },
  [removeTodo]: (state, action) => {
    return state.filter(todo => todo.id !== action.payload.id);
  }
});

export default todosReducer;

createStore: Redux ストアを作成する。
combineReducers: 複数の reducer を組み合わせる。
applyMiddleware: ミドルウェアをストアに適用する。
bindActionCreators: アクションクリエーターを dispatch にバインドする。
connect: React コンポーネントを Redux ストアに接続する。
Provider: Redux ストアを React コンポーネントに提供する。
dispatch: アクションをディスパッチする。
getState: 現在の状態を取得する。

0
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
0
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?