ReactJS och Typescript useContext - egenskapen finns inte på typen
Jag försöker skapa en inloggningssida där en användare trycker på en knapp, och tillståndet uppdateras med hjälp av useContext. Jag har följt några tutorials online och letat efter en förklaring eller lösning men utan framgång. Problemet jag stöter på just nu är att kompilatorn säger i login_spotify.tsx att egenskapen setUser inte finns på typen 'User'. Vad skulle rekommenderas för att jag ska kunna uppdatera tillståndet med det nya i login_spotify.tsx.
Förhoppningsvis kommer mitt program att växa och bli mer komplext, så istället för att bara skicka ner propsen kommer useContext att behövas.
Min kod är som följer:
app.tsx
import React, { useState } from 'react';
import './App.css';
import { UserContext } from '../Context';
import { User} from '../Types';
import { defaultUser } from '../../constants/defaults';
import { SpotifyLoginButton } from '../Buttons';
function App() {
const [ user, setUser ] = useState<User>(defaultUser);
return (
<div className="window">
<h1>{user.name}</h1>
< UserContext.Provider value={{user, setUser}}>
<SpotifyLoginButton />
</UserContext.Provider>
</div>
);
}
export default App;
user_context.tsx
import { createContext } from "react";
import { defaultUser } from "../../constants/defaults";
const UserContext = createContext(defaultUser);
export { UserContext }
login_spotify.tsx
import React, { useContext } from "react";
import Button from '@material-ui/core/Button';
import { UserContext } from "../Context";
function SpotifyLoginButton() {
const {user, setUser} = useContext(UserContext);
return (
<Button variant={"outlined"}
color={'primary'}
onClick={() => {
setUser({
email: "[email ",
image: "something",
name: "Jane Doe",
tokens: {
accessToken: "abc123",
refreshToken: "def234",
},
});
}}>
Login with Spotify
</Button>
);
}
export default SpotifyLoginButton
typer.tsx
export type User ={
email: string | null;
image: string | null;
name: string | null;
tokens: {
accessToken: string | null;
refreshToken: string | null;
};
}
defaults.tsx
import { User } from '../components/Types';
// default user
export const defaultUser: User = {
email: null,
image: null,
name: null,
tokens: {
accessToken: null,
refreshToken: null,
},
};
Svar #1
du bör initiera setUser-funktionen när du skapar kontext
const UserContext = createContext({
user: defaultUser,
setUser: (user: User) => {}
})
