英文:
React - Log Out UseContext
问题
以下是您要翻译的部分:
// CONTEXTS
import User from "./contexts/userContext";
export default function App() {
const [user, setUser] = useState(null);
return (
<main id="App" className="App">
<ToastContainer position="top-left" autoClose={5000} />
<User.Provider value={{ user, setUser }}>
<Router>
{user ? <Header /> : <HeaderAuth />}
<Routes>
<Route exact path="/" element={<Login />} />
<Route exact path="/register" element={<Register />} />
<Route
exact
path="/login/identity/forgotten-password"
element={<Password />}
/>
<Route exact path="/hp" element={<HomePage />} />
<Route exact path="/profile" element={<Profile />} />
</Routes>
<Footer />
</Router>
</User.Provider>
</main>
);
}
import { NavLink } from "react-router-dom";
import { useNavigate } from "react-router-dom";
import { useContext } from "react";
// CONTEXT
import User from "../../../contexts/userContext";
export default function Menu() {
const [currentUser, setCurrentUser] = useContext(User);
const navigate = useNavigate();
const handleLogOut = () => {
setCurrentUser({});
navigate("/");
};
console.log(currentUser);
return (
<ul className="menuProfile">
<li>
<NavLink to="/profile">Mon profil</NavLink>
</li>
<li>
<button type="button" onClick={handleLogOut}>
Déconnexion
</button>
</li>
</ul>
);
}
我不会回答您的问题,只提供翻译。如果您需要进一步的帮助,请随时告诉我。
英文:
I would like to create a log out with useContext - ReactJS. For this, I would like to empty my useContext.
This is my App.jsx
:
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { useState } from "react";
import { ToastContainer } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
import HeaderAuth from "./components/templates/header-auth";
import Header from "./components/templates/header";
import Login from "./components/authentification/login";
import Register from "./components/authentification/register";
import Password from "./components/authentification/password";
import HomePage from "./components//homePage";
import Profile from "./components/authentification/profile";
import Footer from "./components/templates/footer";
import "./app.scss";
// CONTEXTS
import User from "./contexts/userContext";
export default function App() {
const [user, setUser] = useState(null);
return (
<main id="App" className="App">
<ToastContainer position="top-left" autoClose={5000} />
<User.Provider value={{ user, setUser }}>
<Router>
{user ? <Header /> : <HeaderAuth />}
<Routes>
<Route exact path="/" element={<Login />} />
<Route exact path="/register" element={<Register />} />
<Route
exact
path="/login/identity/forgotten-password"
element={<Password />}
/>
<Route exact path="/hp" element={<HomePage />} />
<Route exact path="/profile" element={<Profile />} />
</Routes>
<Footer />
</Router>
</User.Provider>
</main>
);
}
And this is what I tried to code -> my dropdown where I put the log out button:
import { NavLink } from "react-router-dom";
import { useNavigate } from "react-router-dom";
import { useContext } from "react";
// CONTEXT
import User from "../../../contexts/userContext";
export default function Menu() {
const [currentUser, setCurrentUser] = useContext(User);
const navigate = useNavigate();
const handleLogOut = () => {
setCurrentUser({});
navigate("/");
};
console.log(currentUser);
return (
<ul className="menuProfile">
<li>
<NavLink to="/profile">Mon profil</NavLink>
</li>
<li>
<button type="button" onClick={handleLogOut}>
Déconnexion
</button>
</li>
</ul>
);
}
I don't know why, but I get this error:
Do you have any idea why I get this error?
Thanks a lot !
答案1
得分: 1
将这一行更改为:
const { currentUser, setCurrentUser } = useContext(User);
你之所以会收到错误是因为你试图将上下文值解构为一个数组,但它实际上是一个对象。
英文:
Change this line:
const [ currentUser, setCurrentUser ] = useContext(User);
To this one:
const { currentUser, setCurrentUser } = useContext(User);
You are getting that error because you are trying to destructure the context value as an array, but it's an object.
答案2
得分: 0
你将上下文(ctx)解构为一个数组。
将你的 Menu 组件的第一行替换为以下内容:
const { currentUser, setCurrentUser } = useContext(User);
英文:
You destructure the ctx as an array.
Replace the first line of your Menu component with the following
const { currentUser, setCurrentUser } = useContext(User);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论