Reactjs React createContext和useReducer未定义值错误
我有一个React typescript项目,我正在处理这个项目,并且在上下文API方面遇到了一些问题 我尝试将不同的类型传递给Reactjs React createContext和useReducer未定义值错误,reactjs,typescript,react-hooks,Reactjs,Typescript,React Hooks,我有一个React typescript项目,我正在处理这个项目,并且在上下文API方面遇到了一些问题 我尝试将不同的类型传递给createContext方法,这些类型都按预期工作。但是,当我尝试使用useReducerhook时,会出现以下错误: Syntax error: Cannot read property 'map' of undefined (0:undefined) 我已将默认值作为空对象传入,如下所示(我有一种感觉,这就是我得到错误的地方,但此方法以前对我有效): 下面是我实
createContext
方法,这些类型都按预期工作。但是,当我尝试使用useReducer
hook时,会出现以下错误:
Syntax error: Cannot read property 'map' of undefined (0:undefined)
我已将默认值作为空对象传入,如下所示(我有一种感觉,这就是我得到错误的地方,但此方法以前对我有效):
下面是我实现的reducer,它被传递给useReducer
hook:
export type DispatchReturn = {
[key: string]: User | string;
type: string;
}
export const AppContextReducer = (state: AppContextSchema, payload: DispatchReturn): AppContextSchema => {
switch (payload.type) {
case UPDATE_USER:
return {
...state,
user: { ...(payload.user as User) }
};
default:
return state;
}
}
最后,在这里我将值传递给AppContext.Provider
:
function App() {
return (
<AppContext.Provider value={useReducer(AppContextReducer, InitializeContext())}>
<div className="App">
...
</div>
</AppContext.Provider>
);
}
函数应用程序(){
返回(
...
);
}
如能提供任何帮助,我们将不胜感激。提前谢谢你 事实证明,这是Typescript、@typscript eslint/eslint plugin或@typscript eslint/parser或三者结合使用的问题 定义
上下文
类型时实际存在此问题Context
是一个通用对象,它需要一个元组作为参数。无论出于何种原因,当将元组作为参数传递给上下文
对象时,它抛出了上述错误。以下是导致错误的代码:
const AppContext: Context<[AppContextSchema, Dispatch<DispatchReturn>]> = ...
const-AppContext:Context=。。。
为了解决这个问题,我将我的Typescript版本降级为3.9.7
为了解决这个问题,我运行了以下命令:
npm卸载typescript
或删除typescript
npm安装typescript@3.9.7
或纱线添加typescript@3.9.7
rm包装.锁
或rm纱线.锁
rm-rf节点模块
npm安装
或纱线安装
希望这能让人免于和我一样的头痛。如果我将上下文类型设置为
any
,如图所示:const-AppContext:context=createContext([{}作为AppContextSchema,{}作为Dispatch])代码>
function App() {
return (
<AppContext.Provider value={useReducer(AppContextReducer, InitializeContext())}>
<div className="App">
...
</div>
</AppContext.Provider>
);
}
const AppContext: Context<[AppContextSchema, Dispatch<DispatchReturn>]> = ...