reactjs - 尝试正确输入提供程序
问题描述
我正在尝试获取以下权利的 Provider 类型:
interface IAuthContext {
auth: {
user: IUser | null
authenticated: boolean
}
logout: () => Promise<void>
}
const logout = useCallback(
() =>
fetch("http://localhost:4000/logout").then(() =>
setAuth({ user: null, authenticated: false })
),
[]
)
const memo = useMemo(
() => ({
auth,
setAuth,
}),
[auth, setAuth]
)
问题就在这里
return (
<authContext.Provider value={[memo, logout]}>
Type '((() => Promise<void>) | { auth: { user: null; authenticated: boolean; }; setAuth: Dispatch<SetStateAction<{ user: null; authenticated: boolean; }>>; })[]' is missing the following properties from type 'IAuthContext': auth, logout
我能做些什么来解决这个错误?
解决方案
它失败是因为prop 与接口value
不匹配。您正在传递一个不正确IAuthContext
的两个对象的数组。[memo, logout]
您需要传递一个 shape 的对象{auth, logout}
。我不知道您的代码是什么样的,但我认为它类似于下面的代码。我改变了memo
并修复了value
道具。
interface IAuthContext {
auth: {
user: string | null;
authenticated: boolean;
};
logout: () => Promise<void>;
}
const authContext = React.createContext<IAuthContext>(null);
const Test: React.FC = () => {
const [auth, setAuth] = useState<IAuthContext['auth']>(/*someInitialValue*/);
const logout = useCallback(
() => fetch('http://localhost:4000/logout').then(() => setAuth({ user: null, authenticated: false })),
[]
);
const memo = useMemo(() => {
return {
...auth,
};
}, [auth]);
return <authContext.Provider value={{ auth: memo, logout }}>BLAH</authContext.Provider>;
};
推荐阅读
- android - 通过 AdMob ID 检索用户信息
- npm - 'webpack-dev-server' 未被识别为内部或外部命令,
- javascript - D3 力模拟 - 使节点更靠近同一角度的点
- android - 布局 - 约束不起作用
- date - Freemarker - 将 01-JAN -1960 转换为 01/01/1960
- swift - 核心数据编码模式
- salesforce - 无法通过段在 Salesforce 中设置潜在客户对象的记录类型
- cmake - CLion 全局安装
- javascript - 按选择顺序在列表视图中显示层次结构选择
- java - 通过 Rest Assured 对 Spring Boot Web App 进行身份验证时遇到问题