簡體   English   中英

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

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

我無法在 React 18 上使用 Typescript 版本 4.8.3 制作以前的 state。

這是我的 refreshToken 代碼,我收到錯誤

'(prev: any) => any' 類型的值與'IUserData' 類型沒有共同的屬性。 你的意思是叫它嗎?ts(2560)

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;

我的 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>
}

當我嘗試使用 (prev: IUserData) 我得到錯誤

'(prev: IUserData) => { accessToken: any; 類型的值 id?: 號碼 | 不明確的; email?: 字符串 | 不明確的; 角色?:號碼 | 不明確的; auth?: { id?: number | 不明確的; email?: 字符串 | 不明確的; 角色?:號碼 | 不明確的; accessToken?: 字符串 | 不明確的; } | 不明確的; setAuth?: 調度<...> | 不明確的; setPersist?: Dispatch...' 與類型 'IUserData' 沒有共同的屬性。 你的意思是叫它嗎?ts(2560)

你有什么建議嗎?

在 IUserData 內更改 setAuth 中的類型

例如:

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>
}

並從您的 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