【发布时间】:2021-12-09 14:03:37
【问题描述】:
--开发环境:window10、VScode
--Tech: 反应 --typescript
我只想使用 contextAPI 来全局管理变量。(我不使用 useReducer)
变量是从 axios 接收的对象。
const result = await axios.post('/register', {name,username,password})
console.log(result.data);
我想使用 useState 从顶部组件管理变量。
但是由于类型问题,我不能做我想做的事。
// AuthContext.tsx
import {createContext, useContext} from 'react';
export type AuthType = {
auth: object;
setAuth: (a: object) => void;
}
export const AuthContext = createContext<AuthType>({
auth: {a:1},
setAuth: () => console.log('why not worked??')
})
export const useAuth = () => useContext(AuthContext);
我将 auth 类型声明为接收 result.data 的对象(此变量为对象)。
为了使用 useState 挂钩全局管理变量,我们在顶层组件中编写了以下内容。
// App.tsx
import React,{useState} from 'react'
import styled from 'styled-components';
import ToolBar from './components/ToolBar';
import MainPage from "./pages/MainPage";
import LoginPage from "./pages/LoginPage";
import RegisterPage from "./pages/RegisterPage";
import { Switch, Route } from 'react-router-dom';
import { AuthContext, AuthType } from './contexts/AuthContext';
const Container = styled.div`
max-width: 1200px;
margin: 0 auto;
`;
function App() {
const [auth, setAuth] = useState<AuthType>()
return (
<Container>
<AuthContext.Provider value={{auth,setAuth}} >
<ToolBar/>
<Switch>
<Route path='/' component={MainPage} exact />
<Route path='/auth/register' component={RegisterPage} exact/>
<Route path='/auth/login' component={LoginPage} exact/>
</Switch>
</AuthContext.Provider>
</Container>
)
}
export default App
但是,标签 AuthContext.Provider 的属性值出现类型错误
内容如下。
auth的错误
键入'AuthType | undefined' 不可分配给类型 'object'。 类型“未定义”不可分配给类型“对象”.ts(2322)
setAuth的错误
类型'调度
>' 不能分配给类型 '(a: object) => void'。 参数“value”和“a”的类型不兼容。 类型 'object' 不可分配给类型 'SetStateAction '。 类型 'object' 不可分配给类型 '(prevState: AuthType | undefined) => AuthType |不明确的'。 类型“{}”不匹配签名“(prevState: AuthType | undefined): AuthType |未定义'.ts(2322)
我找不到任何与此相关的信息和知识。所以想请教各位前辈。
对于低水平的问题,我深表歉意。
【问题讨论】:
标签: reactjs typescript axios use-state context-api