수업 내용
작업 내용
useState함수 사용
import { useState } from 'react';
const UseInput = validateValue => {
const [enteredValue, setEnteredValue] = useState('');
const [isTouched, setIsTouched] = useState(false);
const [selectedValue, setSelectedValue] = useState('');
const valueIsValid = validateValue(enteredValue);
const hasError = !valueIsValid && isTouched;
const valueChangeHandler = event => {
setEnteredValue(event.target.value);
};
const inputBlurHandler = event => {
setIsTouched(true);
};
const reset = () => {
setEnteredValue('');
setIsTouched(false);
};
return {
value: enteredValue,
isValid: valueIsValid,
hasError,
valueChangeHandler,
inputBlurHandler,
reset,
};
};
export default UseInput;
import UseInput from './UseInput';
const isNotEmpty = value => value.trim() !== '';
const Form = () => {
const {
value: studyNameValue,
isValid: studyNameIsValid,
hasError: studyNameHasError,
valueChangeHandler: studyNameChangeHandler,
inputBlurHandler: studyNameBlurHandler,
reset: resetStudyNameInput,
} = UseInput(isNotEmpty);
let formIsValid = false;
if (
nameIsValid
) {
formIsValid = true;
}
const submitHandler = async event => {
event.preventDefault();
if (!formIsValid) {
return;
}
const submitData = {
studyName: studyNameValue,
};
resetStudyNameInput();
};
const studyNameClasses = studyNameHasError
? 'form-control invalid'
: 'form-control';
return (
<form onSubmit={submitHandler}>
<NameInput className={studyNameClasses}>
<h4>Name</h4>
<input
ref={studyNameIsInputRef}
value={studyNameValue || ''}
onChange={studyNameChangeHandler}
onBlur={studyNameBlurHandler}
type="text"
placeholder="이름을 입력해주세요"
/>
{studyNameHasError && <p>이름을 입력해주세요</p>}
</NameInput>
<Button
disabled={!formIsValid}
type="submit"
onChange={submitHandler}
>
완료
</Button>
</form>
);
}
export default Form;