wrap user input component

This commit is contained in:
2023-02-16 22:56:25 +08:00
parent 3e0266e782
commit 4bbdac8abe
2 changed files with 44 additions and 28 deletions

View File

@@ -0,0 +1,40 @@
import React from "react";
const UserInputWrap = ({ children, setUser }) => {
const [inputUser, setInputUser] = React.useState("");
const [begin, setBegin] = React.useState(false);
React.useEffect(() => {
setInputUser(localStorage.getItem("user") || "");
}, []);
return (
<>
{!begin && (
<div>
<input
placeholder="在这输你的名字"
value={inputUser}
onChange={(event) => setInputUser(event.target.value)}
/>
<button
onClick={() => {
if (inputUser.trim() === "") {
alert("姓名不能为空");
return;
}
setUser(inputUser.trim());
setBegin(true);
localStorage.setItem("user", inputUser.trim());
}}
>
Login
</button>
</div>
)}
{begin && children}
</>
);
};
export default UserInputWrap;

View File

@@ -1,14 +1,10 @@
import React from "react"; import React from "react";
import Head from "next/head"; import Head from "next/head";
import Timetable from "@/components/Timetable"; import Timetable from "@/components/Timetable";
import UserInputWrap from "@/components/UserInputWrap";
export default function Home() { export default function Home() {
const [user, setUser] = React.useState(""); const [user, setUser] = React.useState("");
const [begin, setBegin] = React.useState(false);
React.useEffect(() => {
setUser(localStorage.getItem("user") || "");
}, []);
return ( return (
<> <>
@@ -19,29 +15,9 @@ export default function Home() {
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
</Head> </Head>
<main> <main>
{!begin && ( <UserInputWrap setUser={setUser}>
<div> <Timetable user={user} />
<input </UserInputWrap>
placeholder="在这输你的名字"
value={user}
onChange={(event) => setUser(event.target.value)}
/>
<button
onClick={() => {
if (user.trim() === "") {
alert("姓名不能为空");
return;
}
setUser(user.trim());
setBegin(true);
localStorage.setItem("user", user);
}}
>
Login
</button>
</div>
)}
{begin && <Timetable user={user} />}
</main> </main>
</> </>
); );