강의

멘토링

커뮤니티

Inflearn Community Q&A

myhoue33721601's profile image
myhoue33721601

asked

[Renewal] Creating NodeBird SNS with React

Creating a membership registration page (custom hook)

약관동의부분

Written on

·

403

0

안녕하세요. 강의 너무 잘듣고있습니다 ^^

두가지 질문있는데요,

1) onChangeTerm의 deps에 term이 들어가는 이유, 들어가지 않을때와 언제 들어가야하는지 헷갈립니다. ㅜ

2) 저는 아래와같이 termError에 not 조건을 주어야 Errormessage가 노출되지 않던데,, 아래 작성한 코드 첨부드렸습니다. 혹시 잘못된 부분이 있는지 확인 부탁드립니다.

{!termError && <ErrorMessage> Agreement cannot be null. </ErrorMessage>}

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

const ErrorMessage = styled.div `
color: red;
`
;

const Signup = () => {

const [id , onChangeId ] = useInput('');
const [nickname , onChangeNickname ] = useInput('');
const [password , onChangePassword ] = useInput('');

const [passwordCheck, setPasswordCheck ] = useState('');
const [passwordError, setPasswordError ] = useState(false);
const onChangePasswordCheck = useCallback((e) =>{
setPasswordCheck(e.target.value);
setPasswordError(e.target.value !== password);
}, [password]);

const [termError, setTermError ] = useState(false);
const [term, setTerm] = useState('');
const onChangeTerm = useCallback((e) =>{
setTerm(e.target.checked);
setTermError(false);
}, [term]);


const onSubmit = useCallback(() =>{

console.log(term);

if(password !== passwordCheck){
return setPasswordError(true);
}
if (!term){
return setTermError(true);
}
console.log(id, password, nickname);
}, []);


return (

<AppLayout>
<Head>
<title>Sign up | NodeBird</title>
</Head>

<Form onFinish={onSubmit}>
<div>
<label htmlFor="user-id">ID</label>
<br/>
<Input name="user-id" value={id} required onChange={onChangeId} />
</div>
<div>
<label htmlFor="user-nick">NICKNAME</label>
<br/>
<Input name="user-nick" value={nickname} required onChange={onChangeNickname} />
</div>
<div>
<label htmlFor="user-password">PASSWORD</label>
<br/>
<Input name="user-password" value={password} required onChange={onChangePassword} />
</div>

<div>
<label htmlFor="user-password-check">PASSWORD CHECK</label>
<br/>
<Input
name="user-password-check"
type="password"
value={passwordCheck}
required
onChange={onChangePasswordCheck}
/>
{passwordError && <ErrorMessage> Password is not equal. </ErrorMessage>}
</div>

<div>
<Checkbox name="user-term" checked={term} onChange={onChangeTerm}>
제로초 말을 잘 들을 것에 동의합니다.
</Checkbox>
{!termError && <ErrorMessage> Agreement cannot be null. </ErrorMessage>}
</div>

<div style = {{ marginTop: 10}}>
<Button type="primary" htmlType="submit">Sign up</Button>
</div>
</Form>
</AppLayout>

);
};



export default Signup
;
reduxreactnodejsexpressNext.js

Answer 1

1

zerocho님의 프로필 이미지
zerocho
Instructor

1. onChangeTerm에는 term이 안 들어가도 됩니다. 함수 안에서 안 쓰이니까요.

2. onSubmit에는 password, passwordCheck, term 넣어주셔야 합니다. 함수 안에서 쓰이니까요. 그러면 ! 안 붙여도 작동할 것입니다.

myhoue33721601's profile image
myhoue33721601

asked

Ask a question