inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React로 NodeBird SNS 만들기

1-7. 회원가입 state와 custom hook

2020.08.09 antd

203

김민상

작성한 질문수 1

0

import React, { useState } from 'react';
import AppLayout from "../components/AppLayout";
import Head from "next/head";
import { Form, Input, Checkbox, Button } from 'antd';

const Signup = () => {
  const [id, setId] = useState('');
  const [nick, setNick] = useState('');
  const [password, setPassword] = useState('');
  const [passwordCheck, setPasswordCheck] = useState('');
  const [term, setTerm] = useState(false);
  const [passwordError, setPasswordError] = useState(false);
  const [termError, setTermError] = useState(false);

  const onFinish= () => {
    if (password !== passwordCheck) {
      return setPasswordError(true);
    }
    if (!term) {
      return setTermError(true);
    }
    console.log({
      id,
      nick,
      password,
      passwordCheck,
      term,
    });
  };

  const onChangeId = (e) => {
    setId(e.target.value);
  };

  const onChangeNick = (e) => {
    setNick(e.target.value);
  };

  const onChangePassword = (e) => {
    setPassword(e.target.value);
  };

  const onChangePasswordChk = (e) => {
    setPasswordError(e.target.value !== password);
    setPasswordCheck(e.target.value);
  };

  const onChangeTerm = (e) => {
    setTermError(false);
    setTerm(e.target.checked);
  };

  return (
    <>
      <Head>
        <title>NodeBird</title>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/antd/3.16.2/antd.css" />
      </Head>
      <AppLayout>
        <Form onFinish={onFinish} style={{ padding: 10 }}>
          <Form.Item
            label={"아이디"}
            name={"user-id"}
            rules={[{ required: true, message: "Please input your user ID!"}]}
          >
            <Input name="user-id" value={id} required onChange={onChangeId} />
          </Form.Item>
          <Form.Item
            label={"닉네임"}
            name={"user-nick"}
            rules={[{ required: true, message: "Please input your nickname!"}]}
          >
            <Input name="user-nick" value={nick} required onChange={onChangeNick} />
          </Form.Item>
          <Form.Item
            label={"비밀번호"}
            name={"user-password"}
            rules={[{ required: true, message: "Please input your password!"}]}
          >
            <Input name="user-password" type={"password"} value={password} required onChange={onChangePassword} />
          </Form.Item>
          <Form.Item
            label={"비밀번호 체크"}
            name={"user-password-check"}
          >
            <Input name="user-password-check" type={"password"} value={passwordCheck} required onChange={onChangePasswordChk} />
            {passwordError && <div style={{ color: 'red' }}>비밀번호가 일치하지 않습니다.</div>}
          </Form.Item>
          <Form.Item name={"user-term"}>
            <Checkbox name={"user-term"} checked={term} onChange={onChangeTerm}>서비스 이용 동의</Checkbox>
            {termError && <div style={{ color: 'red' }}>약관에 동의하셔야 합니다.</div>}
          </Form.Item>
          <Form.Item>
            <Button type="primary" htmlType="submit">가입하기</Button>
          </Form.Item>
        </Form>
      </AppLayout>
    </>
  );
};

export default Signup;

javascript react

답변 1

1

제로초(조현영)

기존판 강좌는 antd 3버전으로 제작되어 4버전과는 사용법이 다릅니다. 특히 4버전에서 onSubmit 대신 onFinish로 바뀔 때 e.preventDefault()가 없어졌습니다.

next 10 이상에서는 redux dev tool 구동이 안되나요?

0

272

1

세션 갱신 문의 건

0

482

7

배포 진행 후 Highlight updates components render 표시

0

445

1

똑같은 기능을 하는 테이블

0

447

4

관계형

0

312

2

프론트 서버를 이용하지 않는경우

1

299

3

인피니트 스크롤링 사용시 오류

0

278

0

계속 이런에러가 떠서 해결하기는 했는데 어떤 의미인지 모르겠습니다.

0

432

2

req.user가 언제 생성되나요??

0

330

2

Cannot read property 'id' of null 에러

0

332

1

리트윗한 게시글 불러오는 sequelize

0

252

1

result.data에서 images인 이유

0

281

2

takeLatest에 대한 질문입니다.

1

342

2

프론트에서 express를 사용하지 않을때 동적라우팅

0

501

6

getInitialProps가 클라이언트에서 수행되는 이유?

0

258

1

리로드하면 팔로우 언팔로우 값이 초기화 되는 문제입니다.

0

445

2

스타일드 컴포넌트와 className을 통한 스타일 적용의 차이에 대해 궁금합니다

0

585

2

할인 쿠폰 사용이 안되는되요 (848-f9af83f183e3)

0

365

1

nodejs mvc 패턴

0

975

4

사용하고 보니, 람다 구성이 궁금합니다!

0

266

1

제로초님

0

445

1

새로고침 로그인 풀림 문제.

0

247

1

안녕하세요. 강의 너무 감사합니다

0

157

1

제로초님

0

170

1