input 값으로 state 변경하기
작성할 때마다, input 값 state 추가하기
onChange 메서드를 이용한다.
방법1 concat
import React, { useState } from "react";
import "./App.css";
import Todo from "./Todo.js";
function App() {
const [todoList, setTodoList] = useState([
"밥 먹기",
"물어보살 보기",
"책 읽기",
]);
const todosMap = todoList.map((todoList) => <li>{todoList}</li>);
const inputChange = (e) => {
setTodoList(todoList.concat(e.target.value));
console.log(todoList);
};
return (
<div className="App">
<p>오늘의 할 일</p>
{todosMap}
<input onChange={inputChange}></input>
</div>
);
}
export default App;
방법2 spread
state안의 배열 복사 -> 그 복사한 배열을 수정 -> 그 수정한 값으로 state 수정
버튼을 눌렀을 때, input 값을 state에 추가 하기
버튼 클릭 => input 값 추가하기
onClick메서드
시도1
<button onClick={inputSave}>저장</button>
const inputSave = (e) => {
console.log(e.target.value);
setTodoList(todoList.concat(e.target.value));
};
이렇게 했는데 자꾸 e.target.value가 빈 값으로 나왔음.. 왜그러지 했는데 저 (e)가 버튼에 대한 이벤트니까 당연ㅋ
방법1
import React, { useState } from "react";
import "./App.css";
import Todo from "./Todo.js";
function App() {
const [todoList, setTodoList] = useState([
"밥 먹기",
"물어보살 보기",
"책 읽기",
]);
const todosMap = todoList.map((todoList) => <li>{todoList}</li>);
let [inputValue, setInputValue] = useState("");
const inputChange = (e) => {
setInputValue(e.target.value);
};
const inputSave = () => {
setTodoList(todoList.concat(inputValue));
};
return (
<div className="App">
<p>오늘의 할 일</p>
{todosMap}
<input onChange={inputChange}></input>
<button onClick={inputSave}>저장</button>
</div>
);
}
export default App;
(1) 인풋값을 저장할 state 만들기
let [inputValue, setInputValue] = useState("");
(2) 인풋이 onChange할 때 state변경
const inputChange = (e) => {
setInputValue(e.target.value);
};
(3) 저장 버튼 클릭할 때, inputSave 함수 실행
<button onClick={inputSave}>저장</button>
(4) 인풋값이 저장된 state를 원래 렌더링하는 state에 추가하기
const inputSave = () => {
setTodoList(todoList.concat(inputValue));
};
Submit 했을 때, input값을 state에 추가하기
참고영상 https://www.youtube.com/watch?v=UFtirvA6NDU&t=267s
(1) 인풋값을 저장할 state 만들기
(2) input의 value를 그 state로 만들기
나는 input의 value를 유저가 작성하면, 그 value를 state로 옮긴다고 생각했다. 그런데 그게 아니라 반대였다.
(3) input에 onChange 메서드 사용하기
인풋에 작성할 때, 그 state를 변경한다. 결과적으로 그렇게 된다.
(4) form 태그로 감싸고 onSubmit 메서드 사용하기
submit가 발생됐을 때, preventDefault()실행해서 새로고침 막기
(5) button type=submit
import React, { useState } from "react";
import "./App.css";
import Todo from "./Todo.js";
function App() {
const [todoList, setTodoList] = useState([
"밥 먹기",
"물어보살 보기",
"책 읽기",
]);
const todosMap = todoList.map((todoList) => <li>{todoList}</li>);
let [inputValue, setInputValue] = useState("");
const inputSubmit = (e) => {
e.preventDefault();
setTodoList(todoList.concat(inputValue));
};
const inputChange = (e) => {
setInputValue(e.target.value);
};
return (
<div className="App">
<p>오늘의 할 일</p>
{todosMap}
<form onSubmit={inputSubmit}>
<input value={inputValue} onChange={inputChange}></input>
<button type="submit">저장</button>
</form>
</div>
);
}
export default App;
코드는 이렇다. 그런데 저장 버튼을 누르고 나면 input칸이 비워지지 않고 그대로 남아있다. 마저 수정하도록 하자.
setInputValue(""); 로 input값을 비워준다.
const inputSubmit = (e) => {
e.preventDefault();
setTodoList(todoList.concat(inputValue));
setInputValue("");
};
이렇게 까지 하면 완성이다.
Author And Source
이 문제에 관하여(input 값으로 state 변경하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bellecode20/연습저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)