작업하고 있는 폴더안에서 component폴더를 만들고 PhoneForm.js를 만들어 놓는다.(다른 파일들과 분리시키기 위해서)
컴포넌트를 작성해준다. 그리고 reactjs code snippet을 확장프로그램에서 설치를 해주면 JS에서 rcc라고 입력을 하면 클래스 형태로 만들어진 컴포넌트를 만들어 줄 수 있다. 그리고 rsc라고 입력하면 함수형 컴포넌트를 만들 수가 있다.
// rcc 클래스 컴포넌트
import React, { Component } from 'react';
class dadada extends Component {
render() {
return (
<div>
</div>
);
}
}
export default dadada;
임시로 PhoneForm이라고 입력해놓고 app.js애서 import해준다. 직접 import 하기보다는 div사이에 PhoneForm을 입력하면 자동으로 import가 완성된다.
import React, { Component } from 'react';
import PhoneForm from './components/PhoneForm';
class App extends Component {
render() {
return (
<div>
<PhoneForm />
</div>
);
}
}
export default App;
PhoneForm컴포넌트로 돌아와서 form을 만들어주고 내부에 input을 만들어 준다.
import React, { Component } from 'react';
class dadada extends Component {
render() {
return (
<form>
<inputn/>
</form>
);
}
}
export default dadada;
input의 상태를 관리하는 방법은 상태 state를 정의해준다. state에 name이라는 값을 넣어주고 input에서 변경 이벤트가 발생될 때 처리할 함수를 만들어준다.
handleChange함수를 만들어 (e)라는 객체를 파라미터로 받아올 것이고 이벤트 객체로써 여기서 어떻게 수정할 건지를 알 수 있다. 밑에서 input이 이벤트 타겟이고 input이 가지고 있는 value값을 setState를 통해서 name값을 설정해 주는 것이다.
import React, { Component } from 'react';
class dadada extends Component {
state = {
name: '',
}
handleChange = (e) => {
this.setState({
name: e.target.value
});
}
render() {
return (
<form>
<inputn/>
</form>
);
}
}
export default dadada;
그리고 input에다가 onChange를 넣어주는데 input에서 값이 변경될 때마다 name값이 바뀐다. 그리고 value값도 설정을 해주면 this.state.name이라고 지어준다.
render() {
return (
<form>
<input onChange={this.handleChange} value={this.state.name}/>
{this.state.name}
</form>
);
}
}
input을 하나 더 추가해주고 placeholder을 추가해주는데 placeholder은 아무것도 입력되지 않았을 때 보여주는 값이다.
현재 이 input같은 값이 state쪽에서 관리가 되지 않는다. 지금까지는 handleChange가 발생했을 때 name값을 수정하도록 했다.
render() {
return (
<form>
<input placeholder="이름" onChange={this.handleChange} value={this.state.name}/>
<input placeholder="전화번호" />
{this.state.name}
</form>
);
}
state에 phone이라는 값을 추가해주고 두번째 input값에 this.state.phone을 넣어준다. 여기서 onchange를 설정하는 방법은 일단 여러 input을 관리할려면 name값을 설정해 줘야 한다. 각 input에다가 name값을 넣어준다.
그리고 위에서 name값이 들어갔었는데 이것을 [e.target.name]으로 바꿔준다. 그러면 name이라고 있는자리에 state에 name이라는 키워드 대신에 input에 있는 name값이 [e.target.name]에 들어오게 된다.
그래서 input이 변경되면은 name값이 e.target.name으로 들어와서 state에 name이 수정되는 것이고 만약에 phone이 값이 수정되면은 phone쪽에 e.target.name이 들어가져서 수정되는 것이다.
import React, { Component } from 'react';
class PhoneForm extends Component {
state = {
name: '',
phone: '',
}
handleChange = (e) => {
this.setState({
[e.target.name]: e.target.value
});
}
render() {
return (
<form>
<input
name="name"
placeholder="이름"
onChange={this.handleChange}
value={this.state.name}
/>
<input
name="phone"
placeholder="전화번호"
onChange={this.handleChange}
value={this.state.phone}
/>
<div>
{this.state.name} {this.state.phone}
</div>
</form>
);
}
}
export default PhoneForm;
지금까지 state를 통해서 input의 값을 변경하는 방법에 대해서 알아보았다. 이제 input값을 App.js에 전달하는 방법에 대해서 알아보자.
<출처 : velopert(김 민준) 누구든지 하는 리액트: 초심자를 위한 react 핵심 강좌>
https://www.inflearn.com/course/react-velopert/dashboard
누구든지 하는 리액트: 초심자를 위한 react 핵심 강좌 - 인프런 | 강의
리액트를 누구든지 쉽고 재밌게 시작 할 수 있도록 만들어진 강좌입니다., React 핵심 강좌 초심자를 위한 리액트(React) 핵심 강좌입니다. 만약에 여러분이 리액트를 배우고 싶은데, 아직 뭐가 뭔
www.inflearn.com
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Object_initializer
객체 초기자 - JavaScript | MDN
객체는 new Object(), Object.create() 또는 리터럴 표기법 (initializer 표기법)을 사용하여 초기화될 수 있습니다. 객체 초기자(object initializer)는 0개 이상인 객체 속성명 및 관련값 쌍 목록이 콤마로 분리
developer.mozilla.org
'React > velopert_react' 카테고리의 다른 글
배열 렌더링하기 (0) | 2021.08.20 |
---|---|
배열에 데이터 삽입하기(배열 데이터 렌더링 및 관리) (0) | 2021.08.20 |
LyfeCycle API 소개 및 사용법 ⅱ (0) | 2021.08.19 |
LyfeCycle API 소개 및 사용법 ⅰ (0) | 2021.08.19 |
State 사용방법 (0) | 2021.08.18 |