6-1. React에서 사용자 입력 처리 (useState with <input />)
2022. 7. 1. 16:55ㆍReact/한입 크기로 잘라 먹는 리액트(React.js)
만들어 볼 것
import { useState } from "react";
const DiaryEditor = () => {
// author는 state, setAuthor는 상태변화를 주도하는 함수
const [author, setAuthor] = useState("이정환");
return (
<div className="DiaryEditor">
<h2>오늘의 일기</h2>
<div>
<input
name="author"
value={author}
// 값이 바뀌었을 때
onChange={(e) => {
console.log(e.target.value);
console.log(e.target.name);
setAuthor(e.target.value);
}}
/>
</div>
</div>
);
};
export default DiaryEditor;
DiaryEditor.js
import './App.css';
import DiaryEditor from './DiaryEditor';
function App() {
return (
<div className="App">
<DiaryEditor />
</div>
);
}
export default App;
app.js
아래와 같이 state를 설정할 수 있다.
import { useState } from "react";
const DiaryEditor = () => {
// state는 state, setState는 상태변화를 주도하는 함수
const [state, setState] = useState({
author: "",
content: "",
});
return (
<div className="DiaryEditor">
<h2>오늘의 일기</h2>
<div>
<input
name="author"
value={state.author}
// 값이 바뀌었을 때
onChange={(e) => {
setState({
// 순서 바꾸면 안됨
// 변경하고자 하는것을 다음으로 입력하면 됨
...state,
author: e.target.value, // 이게 앞으로 가면, ...state값이 덮어써서 안바뀌게 된다.
});
}}
/>
</div>
<div>
<textarea
value={state.content}
onChange={(e) => {
setState({
...state,
content: e.target.value,
});
}}
/>
</div>
</div>
);
};
export default DiaryEditor;
import { useState } from "react";
const DiaryEditor = () => {
// state는 state, setState는 상태변화를 주도하는 함수
const [state, setState] = useState({
author: "",
content: "",
});
const handleChangeState = (e) => {
console.log(e.target.name);
console.log(e.target.value);
setState({
...state,
[e.target.name]:e.target.value,
})
}
return (
<div className="DiaryEditor">
<h2>오늘의 일기</h2>
<div>
<input
name="author"
value={state.author}
onChange={handleChangeState}
/>
</div>
<div>
<textarea
name="content"
value={state.content}
onChange={handleChangeState}
/>
</div>
</div>
);
};
export default DiaryEditor;
최종
App.js
import './App.css';
import DiaryEditor from './DiaryEditor';
function App() {
return (
<div className="App">
<DiaryEditor />
</div>
);
}
export default App;
DiaryEditor.js
import { useState } from "react";
const DiaryEditor = () => {
// state는 state, setState는 상태변화를 주도하는 함수
const [state, setState] = useState({
author: "",
content: "",
emotion: 1,
});
const handleChangeState = (e) => {
setState({
...state,
[e.target.name]: e.target.value,
})
}
const handleSubmit = () => {
console.log(state);
alert("저장 성공");
}
return (
<div className="DiaryEditor">
<h2>✨오늘의 일기✨</h2>
<div>
<input
name="author"
value={state.author}
onChange={handleChangeState}
/>
</div>
<div>
<textarea
name="content"
value={state.content}
onChange={handleChangeState}
/>
</div>
<div>
<span>오늘의 감정점수 : </span>
<select name="emotion" value={state.emotion} onChange={handleChangeState}>
<option value={1}>1</option>
<option value={2}>2</option>
<option value={3}>3</option>
<option value={4}>4</option>
<option value={5}>5</option>
</select>
</div>
<div>
<button onClick={handleSubmit}>일기 저장하기</button>
</div>
</div>
);
};
export default DiaryEditor;
App.css
.DiaryEditor {
boarder: 1px solid gray;
text-align: center;
padding: 20px;
}
.DiaryEditor input, textarea {
margin-bottom: 20px;
width: 500px;
padding: 10px;
}
.DiaryEditor textarea {
height: 150px;
}
.DiaryEditor select {
width: 300px;
padding: 10px;
margin-bottom: 20px;
}
.DiaryEditor button {
width: 500px;
padding: 10px;
cursor: pointer;
}
'React > 한입 크기로 잘라 먹는 리액트(React.js)' 카테고리의 다른 글
6-3. React에서 리스트 사용하기(Array.map((it)=><Component key={it.id}{...it}/>)) (0) | 2022.07.04 |
---|---|
6-2. React에서 DOM 조작하기 (useRef) (0) | 2022.07.04 |
6. React.js 기본 (일기장 만들어보기) (0) | 2022.07.01 |
5-5. Props (컴포넌트에 데이터를 전달하는 방법) (0) | 2022.07.01 |
5-4. State(상태) (React State) (0) | 2022.07.01 |