컴포넌트의 변수 [State]
💻 기존
let token="123456" (저장)
document.getElementById().innerText = token (화면에 보여주기)
💻 State 는 저장과 화면에 보여주기를 한번에 해준다
const [ state, setState("apple"] = useState()
const [ 변수이름, 저장을 도와주는 도구("저장할 내용")] = useState("초기값")
💻 변경
const [token,setToken("123456")] = useState()
💻 맨위에 꼭 react에서 import 해오기
import { useState } from "react";
인증번호만들기 (State 사용)
인증번호 6자리 "000000"과 "인증번호전송"이라는 버튼을 만들고, 버튼 클릭시 인증번호를 만들어서
인증번호 6자리가 변경되도록 적용해 주세요.
1-1) let과 document.getElementById()를 사용해 주세요.
1-2) state를 사용해 주세요.
📔 결과물
💻 js / html
import { useState } from "react";
export default function VerificationCode() {
const [number, setRandom] = useState("000000");
function aaa() {
let Auth = String(Math.floor(Math.random() * 1000000)).padStart(6, "0");
document.getElementById("number").innerText = Auth;
}
return (
<>
<div id="number">{number}</div>
<button onClick={aaa}>인증번호생성</button>
</>
);
}
📔 중요 포인트
import { useState } from "react";
const [number, setRandom] = useState("000000");
function aaa() {
let Auth = String(Math.floor(Math.random() * 1000000)).padStart(6, "0");
document.getElementById("number").innerText = Auth;
}
입력창 하단에 에러 표시하기
📔 결과물
💻 html/js
import { useState } from "react";
import { Error } from "../../styles/signup-state";
export default function SignupStatePage() {
const [email, setEmail] = useState("");
const [emailError, setEmailError] = useState("");
const [passwordError, setPasswordError] = useState("");
const [password1, setPassword1] = useState("");
const [password2, setPassword2] = useState("");
function onChangeEmail(event) {
setEmail(event.target.value);
}
function onChangePassword1(event) {
setPassword1(event.target.value);
}
function onChangePassword2(event) {
setPassword2(event.target.value);
}
function onClickSignup() {
if (!email.includes("@")) {
setEmailError("@가 없습니다!");
}
if (password1 !== password2) {
setPasswordError("비밀번호가 다릅니다!");
}
}
return (
<div>
이메일: <input type="text" onChange={onChangeEmail} />
<br />
<Error>{emailError}</Error>
{}
비밀번호: <input type="password" onChange={onChangePassword1} />
<br />
비밀번호확인: <input type="password" onChange={onChangePassword2} />
<br />
<Error>{passwordError}</Error>
<button onClick={onClickSignup}>회원가입하기</button>
</div>
);
}
💻 css
import styled from "@emotion/styled";
export const Error = styled.div`
color: red;
`;
📔 중요 포인트
const [email, setEmail] = useState("");
const [emailError, setEmailError] = useState("");
function onChangeEmail(event) {
setEmail(event.target.value);
}
function onClickSignup() {
if (!email.includes("@")) {
setEmailError("@가 없습니다!");
}
}
onChange={onChangeEmail}
<Error>{emailError}</Error>
게시물 등록창만들기 2일차
📔 결과물
💻 html/js
export default function BoardsNewPage() {
const [writer, setWriter] = useState("");
const [writerError, setWriterError] = useState("");
function onChangeWriter(event) {
setWriter(event.target.value);
}
function onClickCorrect() {
if (writer == "") {
setWriterError("입력되지 않았습니다!");
}
}
return (
<TextWrapper>
<Label>작성자</Label>
<Writer
name="writer"
type="text"
placeholder="이름을 적어주세요."
onChange={onChangeWriter}
/>
<Error>{writerError}</Error>
</TextWrapper>
<SubmitButton onClick={onClickCorrect}>수정하기</SubmitButton>
)
💻 css
import styled from "@emotion/styled";
export const Wrapper = styled.div`
width: 1200px;
padding-top: 60px;
padding-right: 100px;
padding-left: 100px;
padding-bottom: 100px;
`;
export const Address = styled.input`
width: 996px;
height: 52px;
border: 1px solid #bdbdbd;
cursor: pointer;
margin-top: 16px;
`;
📔 중요 포인트
전체 페이지(Wrapper) 높이height
고정하지 않기
개별로 높이 주기
이유) 전체 페이지 높이를 고정해버리면 아래로 내려가면서 삐쭉삐쭉 나옴
고정안하면 자연스럽게 길어짐
각각 margin-top
으로 간격 통일하기
굳이 이모션 필요없으면 안해도 된다
<UploadButton>
<div>+</div>
<div>Upload</div>
</UploadButton>
cursor: pointer;
: hover{ background-color: red;}