Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Typescript未处理拒绝(TypeError):setAuthTokens不是函数_Reactjs_Typescript - Fatal编程技术网

Reactjs Typescript未处理拒绝(TypeError):setAuthTokens不是函数

Reactjs Typescript未处理拒绝(TypeError):setAuthTokens不是函数,reactjs,typescript,Reactjs,Typescript,我在React项目的Apps.jsx文件中定义了以下内容: ... omitted for brevity ... import {AuthContext, useAuth} from "./context/auth"; function Login (props: RouteComponentProps<TParams>) { ... omitted for brevity ... const {authTokens, setAuthTokens} = useAuth(

我在React项目的Apps.jsx文件中定义了以下内容:

... omitted for brevity ...
import {AuthContext, useAuth} from "./context/auth";


function Login (props: RouteComponentProps<TParams>) {
  ... omitted for brevity ...
  const {authTokens, setAuthTokens} = useAuth();

  function postLogin() {
        const url = 'http://localhost:8000/rest-auth/login/';
        const withCredentials = true;
        const method = 'post';
        const data = {"username": userName, "password": password};
        axios.request({url, withCredentials, data, method}).then(
            result => {
                // console.log('Login.postLogin.else result is :', result);
                if (result.status === 200) {
                    setAuthTokens(result.data);
                } else {
                    setIsError(true);
                }
            }); // .catch(e => {console.log('Login.postLogin.catch e is :', e); setIsError(true);});
  }
useAuth声明如下:

import { createContext, useContext } from 'react';

export const AuthContext = createContext();

export function useAuth() {
    return useContext(AuthContext);
}
在哪里向AuthContext添加authTokens和setAuthTokens

对我来说,它看起来像是一个空上下文,因此authTokens和setAuthTokens没有定义,而undefined不是一个函数,这就是为什么会出现错误

试试这个:

export const AuthContext = createContext()

export const AuthState = ({ children }) => {
    const [authTokens, setAuthTokens] = useState([])

    const value = {
        authTokens,
        setAuthTokens,
    }

    return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>
}

读你的答案让我想起我忘了在我的应用程序组件中设置上下文,比如“红色板球”,如果我的答案帮助你,你能考虑接受它作为最佳答案,所以问题可以被标记为解决吗?谢谢
const AuthContext = createContext()

function useAuth() {
    return useContext(AuthContext)
}

// useAuth is an empty context, so both authTokens and setAuthTokens are undefined
const { authTokens, setAuthTokens } = useAuth()
export const AuthContext = createContext()

export const AuthState = ({ children }) => {
    const [authTokens, setAuthTokens] = useState([])

    const value = {
        authTokens,
        setAuthTokens,
    }

    return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>
}
const { authTokens, setAuthTokens } = useContext(AuthContext)