Pau*_*aul 7 node.js reactjs redux-thunk react-redux redux-store
我有一个运行 redux 和 thunk 的 React 应用程序,它一直运行良好。我需要在页面重新加载时保持存储状态,以便数据不会丢失,因此创建了一个将数据存储在 localstorage 中的函数,然后返回准备添加到 createStore 的数据(https://stackoverflow.com/a/ 45857898/801861)。数据存储工作正常并返回准备设置状态的对象。在 createStore 中添加数据对象时,反应无法编译并出现此错误:
错误:看起来您正在将多个商店增强器传递给 createStore()。这不受支持。相反,将它们组合成一个函数
这是当前代码返回错误:
const store = createStore(reducers, LoadState, applyMiddleware(thunk) );
//Error: It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function
Run Code Online (Sandbox Code Playgroud)
我正在运行的原始代码:
const store = createStore(reducers, applyMiddleware(thunk) );
Run Code Online (Sandbox Code Playgroud)
我试图在我在网上找到的一些类似问题之后解决这个问题,编译但破坏了最初工作正常的站点代码:
const composeEnhancers = LoadState || compose;
const store = createStore(reducers, composeEnhancers( applyMiddleware(thunk) ) );
//Error: Actions must be plain objects. Use custom middleware for async actions.
Run Code Online (Sandbox Code Playgroud)
不确定我需要改变什么才能让它工作,任何帮助表示赞赏。
小智 11
我认为您正在学习在以前版本的 redux 中执行任务的教程。
您需要创建一个 composeEnhancer,它将接收您的 Redux Dev Tools 扩展,如图所示
const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
Run Code Online (Sandbox Code Playgroud)
从'redux'导入compose后显然如图所示 -
import {createStore, compose, applyMiddleware} from 'redux';
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建如图所示的商店 -
const Store = createStore(rootReducer, composeEnhancer(applyMiddleware(thunk)))
Run Code Online (Sandbox Code Playgroud)
小智 6
该错误是不言自明的。它告诉你具体该怎么做!
也就是说,它告诉您应该使用compose
增强剂。以下是具体操作方法:
步骤#1:从redux库导入“ compose ”
import { createStore, applyMiddleware, compose } from 'redux';
Run Code Online (Sandbox Code Playgroud)
步骤#2:列出你的增强剂列表,因为你有多个增强剂
const enhancers = [LoadState, applyMiddleware(thunk)];
const store = createStore(
reducers,
compose(...enhancers)
);
Run Code Online (Sandbox Code Playgroud)
请参阅此页面了解更多详细信息。
小智 0
您可以使用包将 redux 存储持久保存到本地存储中,并且不需要创建自己的函数: https: //github.com/rt2zz/redux-persist
在该包的第一个示例中,您可以看到如何使用 persistReducer() 和 persistStore() 来保存状态,然后在刷新页面上自动重新水化。