리액트에서 input 태그의 상태를 관리하는 방법
인풋태그를 넣어서 사용할 컴포넌트를 하나 만들어준다
InputSample.js
import React from 'react'
function InputSample(){
return(
<div>
<input/>
<button>초기화</button>
<div>
<b>값:</b>
</div>
</div>
)
}
export default InputSample
InputSample컴포넌트를 App.js에서 렌더링해준다
import InputSample from './components/InputSample';
function App() {
return (
<InputSample/>
);
}
export default App;
그럼이렇게 화면이 나오게된다.
인풋에 입력하는 값이 아래의 값: 옆에 나오게하고
초기화 버튼을 누르면 인풋태그의 값이 지워지게 해줄것이다.
useState를 사용하여상태값이 변경될때마다 페이지의 값도 변하게 해준다
function InputSample(){
const[input,setinput] = useState("")
const change = (e)=>{
setinput(e.target.value)
}
const reset = ()=>{
setinput("")
}
return(
<div>
<input value={input} onChange={change}/>
<button onClick={reset}>초기화</button>
<div>
<b>값:{input}</b>
</div>
</div>
)
}
이렇게 써주면 input태그의 값이변할때(onChange될때) {change}함수가 실행되게 되고
change함수는 setinput으로 input상태의 값에 input 태그의 현재 입력되고있는 value를 넣어주게된다
결과적으로 input태그자체에 써져있는 밸류도 바뀌면서 아래에있는 값 : 옆에도
변경되는 input값이 들어가게된다.
button을 클릭하면 setinput(" ")이 실행되면서 input상태값은 공백이된다
입력한 값이 잘나오고 초기화를 누르면 초기화도 아주 잘된다 ^^ 항상 좀 이랬으면....
다시 이번에는 인풋을 여러개 넣고 사용해보겠다.
InputSample.js
function InputSample(){
const change = (e)=>{
}
const reset = ()=>{
}
return(
<div>
<input placeholder='이름'/>
<input placeholder='닉네임'/>
<button onClick={reset}>초기화</button>
<div>
<b>값:</b>
이름 (닉네임)
</div>
</div>
)
}
input.js파일을 위처럼 수정해준다.
인풋이 2개인 화면이 만들어진다.
여기에 값두개를 인풋두개에 각각 관리할수있는 상태값으로 이름과 닉네임을 따로 띄워준다
function InputSample(){
const[inputs,setInputs] = useState({
name:'',
nickname:''
});
const {name,nickname} =inputs; //inputs를 객체구조분해할당
const change = (e)=>{
const{value,name} =e.target //e.target=함수를실행시키는요소
// 에서 name과 value값을 할당
setInputs({
...inputs, //원래있던 인풋객체를 펼쳐서넣어줌
[name]:value // name변수의 키를가진 값을 value로 설정
});
};
const reset = ()=>{
setInputs({
name:"",
nickname:'',
});
};
return(
<div>
<input name='name' placeholder='이름' onChange={change} value={name}/>
<input name='nickname' placeholder='닉네임' onChange={change} value={nickname}/>
<button onClick={reset}>초기화</button>
<div>
<b>값:</b>
{name} {nickname}
</div>
</div>
)
}
인풋이 두개라서 useState를 이용해서 상태값을 2개만들면 편하겠지만
그러면 함수도 2개만들어야 되고 아마 개발자님들은 그런 방법을 좋아하시지 않는것같다...
useState를 한번만이용하고 대신 값을 객체로 넣어서 2개의 변수를 사용할수있게 해준다.
useState로 변수를 만들때 inputs에 name : " " , nickname : " " 프로퍼티 들이 들어가고
이 프로퍼티들을 객체 구조분해 할당으로 {name,nickname} 변수에 담아준것이다
그리고 인풋에 값을 입력해서 change함수가 실행되면 실행한 인풋태그의 name과 value 값을 가져와서 변수로 저장하고
setInputs() 을 실행시키는데 ...inputs(스프레드구문) 으로 inputs안에 있는
객체를 펼쳐서 넣어주고(원래있던값을저장)
새롭게 name변수 (닉네임인풋을 실행시키면 nickname이 들어가고
네임 인풋으로 실행되면 name이 들어감) 키에 밸류로 입력한 값이 들어가게된다.
최대한 풀어서 설명하긴했는데 천천히 읽다보면 아마 이해가되지않을까 ? 혹시 이해가안되는 점이있다면 댓글로달아주시면 제가 이해한부분에대해서는 설명해드리겠습니다. 저도모른다면 죄송합니다....
저는 벨로퍼트라는 분의 예제를 보고 따라하면서 공부하고 있으니 더 자세한 정보가 필요하시다면 구글에 vlpt검색하고 들어가시면 더 좋은 자료 찾으실수있을거에여 열공합시다~
'프론트엔드 정복기 > 리액트' 카테고리의 다른 글
[React]6 todolist만들기 (쉬운버전,어려운버전) (0) | 2023.01.08 |
---|---|
[React]5 class형 컴포넌트 (0) | 2023.01.08 |
[React]3 조건부렌더링,useState (2) | 2023.01.07 |
[React] 2 props로 컴포넌트에 값전달하기 (0) | 2023.01.07 |
[React] 1 .리액트 사용해보기 JSX기본사용법 (0) | 2023.01.07 |