input, textarea의 자료형이같고 onChange,e.target.value 를 가지고 있다.
이렇게 동작이 비슷한 useState는 하나의 useState로 묶을수 있으며 이럴땐
값을 객체형식으로 받아오면 된다.
아래코드는 두개의 user입력값을 받고 두개의 useState를 사용했을때의 코드이다.
import React from "react";
import { useState } from "react";
const DiaryEditor = () => {
const [author, setAuthor] = useState("");
const [content, setContent] = useState("");
// input, textarea의 자료형이같고 onChange,e.target.value 를 가지고 있다.
//이렇게 동작이 비슷한 useState는 하나의 useState로 묶을수 있으며 이럴땐
//값을 객체형식으로 받아오면 된다.
return (
<div>
<h2>오늘의 일기</h2>
<input
type="text"
value={author}
onChange={(e) => {
setAuthor(e.target.value);
}}
/>
<div>
<textarea
value={content}
onChange={(e) => {
setContent(e.target.value);
}}
/>
</div>
</div>
);
};
export default DiaryEditor;
useState의 값을 객체로 받아오기
객체의 값을 바꾸려면 새로운 객체를 만들어서 값을 바꿔줘야한다.
import React from "react";
import { useState } from "react";
const DiaryEditor = () => {
const [state, setState] = useState({
author: "",
content: "",
});
const handleChangeState = (e) => {
// console.log(e.target.value);
// console.log(e.target.name);
// 해당입력값에 name=""을 만들어주고 [대괄호] 를 열어 key값으로 설정할 e객체를 넣어주고 : value 객체를 만드는것과 같은 형식으로 setState를 설정해준다.
setState({
...state,
[e.target.name]: e.target.value,
});
};
console.log(state.author);
console.log(state.content);
return (
<div>
<h2>오늘의 일기</h2>
<input
name="author"
type="text"
//e객체를 사용하기위해서 value속성을 사용함
onChange={handleChangeState}
/>
<div>
<textarea
name="content"
//e객체를 사용하기위해서 value속성을 사용함
onChange={handleChangeState}
/>
</div>
</div>
);
};
export default DiaryEditor;
새싹 DT 기업연계형 프론트엔드 실무 프로젝트 8주차 블로그 포스팅
'REACT' 카테고리의 다른 글
[새싹 프론트엔드] 동기 비동기 (0) | 2022.12.15 |
---|---|
2022-12-05 [새싹 프론트엔드] 리액트 라우터 router (0) | 2022.12.05 |
2022-12-03 [새싹 프론트엔드]useState 무한루프방지 (0) | 2022.12.03 |
2022-12-01 [새싹 프론트엔드] 디폴트값 (0) | 2022.12.01 |
2022-11-23 [새싹 프론트엔드] 객체분할대입 { } , 배열분할대입 [ ] (0) | 2022.11.23 |