인프런 커뮤니티 질문&답변

강동협님의 프로필 이미지
강동협

작성한 질문수

React로 NodeBird SNS 만들기

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

e.preventDefault();

작성

·

1.9K

0

조금 사소한 질문입니다..

e.preventDefault();

type error: not a function 출력돼서 e.preventDefault; 이렇게하니까 되던데 상관없는건가요?

답변 4

2

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

onFinish에서는 e가 없는 것 같습니다. 그냥 e를 빼시면 됩니다. e.preventDefault()도 지우세요.

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

아뇨 문제가 있습니다. 코드를 보여주세요.

0

강동협님의 프로필 이미지
강동협
질문자

아.. 감사합니다!!

0

강동협님의 프로필 이미지
강동협
질문자

import React, { useStateuseCallback } from 'react';
import { FormInputCheckboxButton } from 'antd';

const Signup = () => {
  const [passwordChecksetPasswordCheck] = useState('');
  const [passwordErrorsetPasswordError] = useState(false);
  const [termsetTerm] = useState(false);
  const [termErrorsetTermError] = useState(false);

  const useInput = (initValue = null=> {
    const [valuesetter] = useState(initValue);
    const handler = useCallback((e=> {
      setter(e.target.value);
    }, []);
    return [valuehandler];
  };

  const [idonChangeId] = useInput('');
  const [nickonChangeNick] = useInput('');
  const [passwordonChangePassword] = useInput('');

  const onSubmit = useCallback(
    (e=> {
      e.preventDefault();
      if (password !== passwordCheck) {
        return setPasswordError(true);
      }
      if (!term) {
        return setTermError(true);
      }
      console.log({
        id,
        nick,
        password,
        passwordCheck,
        term,
      });
    },
    [passwordpasswordCheckterm]
  );

  const onChangePasswordCheck = useCallback(
    (e=> {
      setPasswordError(e.target.value !== password);
      setPasswordCheck(e.target.value);
    },
    [password]
  );
  const onChangeTerm = useCallback((e=> {
    setTermError(false);
    setTerm(e.target.checked);
  }, []);

  return (
    <>
      <Form onFinish={onSubmit} style={padding: 10 }}>
        <div>
          <label htmlFor='user-id'>아이디</label>
          <br />
          <Input name='user-id' value={id} required onChange={onChangeId} />
        </div>
        <div>
          <label htmlFor='user-nick'>닉네임</label>
          <br />
          <Input
            name='user-nick'
            value={nick}
            required
            onChange={onChangeNick}
          />
        </div>
        <div>
          <label htmlFor='user-password'>비밀번호</label>
          <br />
          <Input
            name='user-password'
            value={password}
            type='password'
            required
            onChange={onChangePassword}
          />
        </div>
        <div>
          <label htmlFor='user-password-check'>비밀번호확인</label>
          <br />
          <Input
            name='user-password-check'
            value={passwordCheck}
            type='password'
            required
            onChange={onChangePasswordCheck}
          />
        </div>
        {passwordError && (
          <div style={color: 'red' }}>비밀번호가 일치하지 않습니다.</div>
        )}
        <div>
          <Checkbox name='user-term' checked={term} onChange={onChangeTerm}>
            약관동의
          </Checkbox>
          {termError && (
            <div style={color: 'red' }}>약관에 동의하셔야 합니다.</div>
          )}
        </div>
        <div style={marginTop: 10 }}>
          <Button type='primary' htmlType='submit'>
            가입하기
          </Button>
        </div>
      </Form>
    </>
  );
};

export default Signup;
강동협님의 프로필 이미지
강동협

작성한 질문수

질문하기