【发布时间】:2019-07-01 20:05:19
【问题描述】:
所以我在使用 React Context + Typescript 时遇到了一个非常奇怪的问题。
在上面的示例中,您可以看到我正在尝试做的实际工作。本质上,我正在使用新的 useContext 方法管理状态,并且它运行良好。
但是,当我尝试在我的盒子上执行此操作时,它似乎无法找到通过 useReducer 传递的状态值。
export function AdminStoreProvider(props: any) {
const [state, dispatch] = useReducer(reducer, initialState);
// state.isAuth is avail here
// state.user is avail here
const value = { state, dispatch };
// value.state.isAuth is avail here
return (
/* value does not contain state once applied to the value prop */
<AdminStore.Provider value={value}>{props.children}
</AdminStore.Provider>
);
}
错误信息:
Type '{ state: { isAuth: boolean; user: string; }; dispatch:
Dispatch<Actions>; }' is missing the following properties from type
'IState': isAuth, user
请记住,我使用的代码正是我在盒子上使用的代码,我什至从沙盒下载了代码并尝试运行它,但它不起作用。
我正在使用 VSCode 1.31
我已经成功推断出,如果我改变创建上下文的方式:
export const AdminStore = React.createContext(initialState);
到
export const AdminStore = React.createContext(null);
value 属性不再抛出该错误。
但是,现在 useContext 返回错误:状态不存在于 null 上。如果我将 context 的 defaultState 设置为 {},也是如此。
当然,如果我
React.createContext();
然后 TS 大喊没有提供 defaultValue。
在沙盒中,创建上下文对象的所有 3 个版本都可以正常工作。
提前感谢您的任何建议。
【问题讨论】:
标签: reactjs typescript react-hooks react-context