Redux - Попытка добавить функцию в configureStore - PullRequest
6 голосов
/ 17 января 2020

Я пытаюсь сохранить мой редукс в localStorage, но я не знаю, как добавить его в функцию configureStore редукционного инструментария.

Ошибка:

Аргумент типа '{reducer: {progress: Reducer; }; persistedState: любой; } 'нельзя назначить параметру типа' ConfigureStoreOptions <{progress: number; }, AnyAction> '. Литерал объекта может указывать только известные свойства, а «persistedState» не существует в типе «ConfigureStoreOptions <{progress: number; }, AnyAction> '.

Код:

localStorage.ts

export const loadState = () => {
  try {
    const serializedState = localStorage.getItem("state");
    if (serializedState === null) {
      return undefined;
    }
    return JSON.parse(serializedState);
  } catch (err) {
    return undefined;
  }
};

index.tsx

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import counterSlice from "./store/reducers/counterSlice";
import { configureStore } from "@reduxjs/toolkit";
// import throttle from "lodash.throttle";
import { Provider } from "react-redux";
import { loadState, saveState } from "./store/localStorage";

const reducer = {
  progress: counterSlice
};
const persistedState = loadState();
const store = configureStore({
  reducer,
  persistedState
});

store.subscribe(() => {
  saveState({
    progress: store.getState().progress
  });
});

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById("root")
);

Ответы [ 2 ]

3 голосов
/ 17 января 2020

Я создатель Redux Toolkit. persistedState не является допустимым параметром конфигурации для configureStore. Правильное имя поля: preloadedState.

2 голосов
/ 17 января 2020

Вместо использования configureStore используйте createStore. Для меня это работает:

const store = createStore(
    reducer,
    persistedState
  );

полный пример:

  const loadFromLocalStorage = () => {
    try {
      const serializedState = localStorage.getItem('state');
      return JSON.parse(serializedState);
    } catch (e) {
      throw new Error(e)
    }
  };

  const saveToLocalStorage = state => {
    try {
      const serializedState = JSON.stringify(state);
      localStorage.setItem('state', serializedState);
    } catch (e) {
      throw new Error(e)
    }
  };

  const state= loadFromLocalStorage();


  const store = createStore(
    reducer,
    state
  );
  store.subscribe(() => {
    saveToLocalStorage(store.getState());
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...