Редуктор инструментария Redux не получает ( {действие.полезная нагрузка} )

#reactjs #redux #react-redux #react-hooks #redux-toolkit

Вопрос:

я пытаюсь настроить разбиение на страницы на стороне сервера при каждом щелчке. но когда я пытаюсь обновить состояние с помощью редуктора, я получаю эту ошибку

введите описание изображения здесь

ФАЙЛ КОМПОНЕНТА, из которого я отправляю этот редуктор

  function changePageByNumber(page){
      dispatch(pageByNumber({page:page})) //dispatching reducer
      dispatch(fetchUsers({page:page}));
    }
 

ФАЙЛ СРЕЗА

 const usersSlice = createSlice({
name:'users',
initialState: usersAdapter.getInitialState( { loading: false, page: 1, total_pages: null } ),
reducers:{
  pageByNumber: (state,{action}) => {
    state.page = action.payload // why action not getting payload
  }
},
extraReducers: {
    [fetchUsers.pending]: (state) => {
      state.loading = true
    },
    [fetchUsers.fulfilled]: (state, { payload}) => {
      state.loading = false,
      state.total_records = payload.total,
      state.per_page = payload.per_page,
      state.total_pages = payload.total/payload.per_page,
      usersAdapter.setAll(state, payload.data)      
    },
    [fetchUsers.rejected]: (state) => {
      state.loading = false
    }
  },
});

export const usersSelectors = usersAdapter.getSelectors(
  (state) => state.users,
  )

export const {pageByNumber} = usersSlice.actions
export default usersSlice.reducer
 

Ответ №1:

Объект действия является вторым аргументом, переданным редуктору. Там нет action.action , так что попытка доступа в action.action.payload выдает ошибку.

Вы должны уничтожить payload свойство из action :

 pageByNumber: (state, action) => {
  state.page = action.payload;
}
 

или

 pageByNumber: (state, { payload }) => {
  state.page = payload;
}
 

Основываясь на отправленном действии dispatch(pageByNumber({ page: page })) , я бы также сказал, что вам необходимо получить доступ к page свойству полезной нагрузки действия:

 pageByNumber: (state, action) => {
  state.page = action.payload.page;
}