简体   繁体   English

Typescript 和 ReactJS:以前的 state 如何使其工作

[英]Typescript and ReactJS: previous state how to make it work

I'm having trouble making the previous state on React 18 working with Typescript version 4.8.3.我无法在 React 18 上使用 Typescript 版本 4.8.3 制作以前的 state。

This is my refreshToken code and I get the error :这是我的 refreshToken 代码,我收到错误

Value of type '(prev: any) => any' has no properties in common with type 'IUserData'. '(prev: any) => any' 类型的值与'IUserData' 类型没有共同的属性。 Did you mean to call it?ts(2560)你的意思是叫它吗?ts(2560)

on (prev: any), So I tried adding prev in my 'IUserData' (useAuth() is related to IUserData), but it doesn't work... on(prev:any),所以我尝试在我的'IUserData'中添加prev(useAuth()与IUserData相关),但它不起作用......

const useRefreshToken = () => {
    const { setAuth } = useAuth();

    const refresh = async () => {
        const response = await axios.get('/refresh', {
            withCredentials: true 
        });
        setAuth((prev: any) => { 
            return { 
                ...prev, 
                role: response.data.idRole, 
                accessToken: response.data.accessToken }
        });
        return response.data.accessToken;
    }
    return refresh;
};

export default useRefreshToken;

My IUserData interface:我的 IUserData 接口:

export interface IUserData {
    id?: number
    email?: string
    role?: number
    accessToken?: string
    auth?: {id?: number
        email?: string
        role?: number
        accessToken?: string
    }
    setAuth?: Dispatch<SetStateAction<IUserData>>
    setPersist?: Dispatch<SetStateAction<boolean>> | Dispatch<any>
}

When I try with (prev: IUserData) I get the error :当我尝试使用 (prev: IUserData) 我得到错误

Value of type '(prev: IUserData) => { accessToken: any; '(prev: IUserData) => { accessToken: any; 类型的值id?: number | id?: 号码 | undefined;不明确的; email?: string | email?: 字符串 | undefined;不明确的; role?: number |角色?:号码 | undefined;不明确的; auth?: { id?: number | auth?: { id?: number | undefined;不明确的; email?: string | email?: 字符串 | undefined;不明确的; role?: number |角色?:号码 | undefined;不明确的; accessToken?: string | accessToken?: 字符串 | undefined;不明确的; } | } | undefined;不明确的; setAuth?: Dispatch<...> | setAuth?: 调度<...> | undefined;不明确的; setPersist?: Dispatch...' has no properties in common with type 'IUserData'. setPersist?: Dispatch...' 与类型 'IUserData' 没有共同的属性。 Did you mean to call it?ts(2560)你的意思是叫它吗?ts(2560)

Do you have any suggestions?你有什么建议吗?

Change the type in setAuth inside of IUserData在 IUserData 内更改 setAuth 中的类型

For example:例如:

type AuthData = {
    id?: number
    email?: string
    role?: number
    accessToken?: string
}

export interface IUserData {
    id?: number
    email?: string
    role?: number
    accessToken?: string
    auth?: AuthData,
    setAuth?: Dispatch<SetStateAction<AuthData>>
    setPersist?: Dispatch<SetStateAction<boolean>> | Dispatch<any>
}

and remove the any type from your prevState并从您的 prevState 中删除 any 类型

...
setAuth((prev) => { 
  return { 
    ...prev, 
    role: response.data.idRole, 
    accessToken: response.data.accessToken 
  }
});
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM