Как увидеть state внутри reduce

Если распечатать state внутри редюсера, то видим какой-то странный объект вида: Proxy {i: 0, A: {…}, P: false, I: false, D: {…}, …}

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
27 сентября 2022

Proxy объект - это особый объект, который позволяет отслеживать изменения объекта и вызывать обработчики на изменения. Состояние (state) в редюсерах остаётся неизменяемым (его нельзя мутировать) и редюсер должен возвращать новое состояние. Но redux-toolkit, с помощью объекта Proxy, даёт возможность работать с состоянием как с обычным объектом и мутировать его, то есть мы можем например переназначать свойства:

state.todos = newTodos;

Чтобы распечатать состояние, в redux-toolkit встроена функция current(), она позволяет получить текущее состояние из прокси-объекта:

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

const slice = createSlice({
  name: 'todos',
  initialState: [],
  reducers: {
    addTodo: (state, action) => {
      state.push(action.payload);
      // Выводим в консоль обновлённое состояние
      console.log(current(state));
    },
  },
});
55 1