Можно ли вручную отправить состояние thunk в createAsyncthunk

#redux #react-redux #redux-toolkit

#redux #реагировать-redux #redux-toolkit

Вопрос:

Привет, товарищи программисты,

В последнее время мне было весело изучать react-redux, но у меня есть один вопрос, который меня беспокоит.

Я понимаю, что при его использовании createAsyncThunk автоматически генерируются константы типа действия. (ожидание, выполнение и отклонение)

Что я хотел знать, так это то, что есть ли какой-либо способ вручную отправлять тип действия во createAsyncthunk время, чтобы мы могли иметь больше гибкости в нашем коде.

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

// First, create the thunk
const fetchUserById = createAsyncThunk(
  'users/fetchByIdStatus',
  async (userId, thunkAPI) => {
    const response = await userAPI.fetchById(userId).then(
       ...
       dispatch(fulfilled)   // is this possible ?
    ).catch(
       dispatch(rejected)    // is this possible ?
    )

    return response.data
  }
)

// Then, handle actions in your reducers:
const usersSlice = createSlice({
  name: 'users',
  ...,
  extraReducers: {
    // Add reducers for additional action types here, and handle loading state as needed
    [fetchUserById.fulfilled]: (state, action) => {
      // Add user to the state array
      state.entities.push(action.payload)
    }
  }
})

// Later, dispatch the thunk as needed in the app
dispatch(fetchUserById(123))
 

Ответ №1:

Суть createAsyncThunk в том, что он генерирует эти типы действий, _ и отправляет их для вас автоматически. Вам определенно не нужно dispatch(fulfilled()) самому, потому что это то, что createAsyncThunk вам нужно — вам просто нужно вернуть обещание, которое либо разрешает, либо отклоняет, и оно отправляет fulfilled/rejected типы действий на основе этого.

У вас есть доступ к thunkAPI.dispatch , так что вы можете отправлять другие действия, если это необходимо, но вам не нужно беспокоиться о самих fulfilled/rejected действиях.