React Native中legacy_createStore报错:undefined is not a function求助
Redux "undefined is not a function" 报错解决方案
错误原因
你遇到的报错源于createStore变量未正确获取到函数:你从redux包中导入legacy_createStore并别名成createStore,但redux 4.2.0本身并没有导出legacy_createStore这个方法——该方法是@reduxjs/toolkit提供的兼容导出,直接从redux包导入会导致createStore为undefined,调用时触发错误。
另外你的reducer存在逻辑bug:ADD_LIST case中返回{ ...state, newList }会给state新增newList字段,而非更新原有的nameList,会导致后续无法正确获取更新后的列表数据。
修复步骤
方案1:使用官方推荐的@reduxjs/toolkit配置store(优先选择)
@reduxjs/toolkit是Redux官方推荐的工具集,简化了store配置流程,同时内置了最佳实践:
修改Provider.js:
import React from "react"; import { Provider } from "react-redux"; import { configureStore } from "@reduxjs/toolkit"; import reducers from "./reducers"; import initialState from './store' const UserProvider = ({children}) => { const store = configureStore({ reducer: reducers, preloadedState: initialState }) return <Provider store={store}>{children}</Provider> } export default UserProvider
方案2:使用redux原生createStore(不推荐,已标记为legacy)
如果坚持使用原生redux,修正导入方式即可:
修改Provider.js:
import React from "react"; import { Provider } from "react-redux"; import { createStore } from "redux"; import reducers from "./reducers"; import initialState from './store' const UserProvider = ({children}) => { const store = createStore(reducers, initialState) return <Provider store={store}>{children}</Provider> } export default UserProvider
修正reducer逻辑bug
修改reducers.js中的ADD_LIST case,确保更新正确的state字段:
export default function (state, action) { switch (action.type) { case "ADD_LIST": const {name} = action.payload const newList = [...state.nameList, name] return { ...state, nameList: newList } default: return state } }
内容的提问来源于stack exchange,提问作者baristp04
相关产品推荐
相关产品推荐

