티스토리 뷰
-
컴포넌트 제작하기
-
구조
-
App.js
-
Subject.js
-
TOC.js
-
Control.js
-
Content
-
CreateContent.js
-
UpdateContent.js
-
컴포넌트 사용하는 법
-
아래와 같이 사용하는 쪽의 component에 import를 해주고 사용될 이름을 함께 입력
import Subject from "./components/Subject";
render 함수의 return 부분에 설정해 준 이름으로 사용할 위치에 태그를 생성한다.
<Subject></Subject>
-
state 사용하기
-
state는 언제 사용?
-
React에서 동적인 데이터를 사용할 때 state를 사용함
-
특징
-
아래와 같은 형식으로 constructor안에 초기값을 설정해 주어야 한다.
-
this.state = {}
-
state값 변경은 직접 조작할 수 없다.
-
state가 변경될 때마다 setState메소드를 사용해서 변경해야 한다.
-
state와 setState 예시
-
Increase 버튼을 클릭할 때 마다 Counter 컴포넌트 state의 number값을 변경시키는 것이 목표
-
Counter컴포넌트의 state에 number를 추가한다.
-
number를 표시할 위치에 {this.state.number}를 추가한다.
-
setState를 사용해서 number값을 변경한다.
class Counter extends React.Component {
constructor(props) { // 1. 생성자의 state에 number를 추가한다.
super(props);
this.state = { // 이 컴포넌트의 state 설정
number: 0 // number의 초기 값 설정
};
};
handleClick() { // 3. setState를 사용해서 number값을 변경한다.
this.setState(() => {
return {number: this.state.number + 1};
});
};
render() {
return (
<div>
<h2>{this.state.number}</h2> // 2. state의 number 값을 표시
<button>Increase</button>
</div>
);
};
}
-
이벤트 사용하기
-
사용자가 브라우저에서 특정 DOM 요소와 상호작용하는 것을 이벤트라고 부름
-
ex) onClick, onChange
-
사용자의 특정 행동에 대해 특정 이벤트네 대해 처리할 수 있음
-
하위 컴포넌트에서 상위 컴포넌트로 값을 넘겨줄 수 있음
-
하위 컴포넌트에서 onSumit 함수에 title과 desc 값을 넣어 넘긴다.
class CreateContent extends Component {
render (){
return (
<form action="/create_process" method="post"
onSubmit={function(e){
...
this.props.onSubmit(
e.target.title.value,
e.target.desc.value
);
}.bind(this)}
>
);
}
상위 컴포넌트에서 다음과 같이 값을 받을 수 있다.
<CreateContent onSubmit={function(_title, _desc){
...
}.bind(this)}></CreateContent>
-
update 페이지에서 form input에 초기데이터 설정하기
-
state에 props를 사용해서 부모 컴포넌트에서 데이터를 가져온다.
-
새로운 값들을 변경해주기 위해 setState로 설정한다.
-
id값을 hidden 값으로 함께 보내주어야하고 onChange를 통해 value 값이 변경될 때 마다 즉시 input에 적용되도록 한다.
class UpdateContent extends Component {
constructor(props){
super(props);
this.state = { // 1.state에 props를 사용해서 부모 컴포넌트에서 데이터를 가져온다.
id:this.props.data.id,
title: this.props.data.title,
desc: this.props.data.desc
}
this.inputFormHandler = this.inputFormHandler.bind(this);
}
inputFormHandler(e){ // 2. 새로운 값들을 변경해주기 위해 setState로 설정한다.
this.setState({[e.target.name]:e.target.value});
}
render (){
...
<form action="/create_process" method="post"
onSubmit={function(e){
e.preventDefault();
this.props.onSubmit(
this.state.id,
this.state.title,
this.state.desc
);
}.bind(this)}
>
<input type="hidden" name="id" value={this.state.id}></input>
// 3-1. id값을 hidden으로 같이보내준다.
<p>
<input
type="text"
name="title"
placeholder="title"
value={this.state.title}
onChange={this.inputFormHandler}/>
// 3-2. value값이 변경될 때 함께 바꾸어준다.
</p>
...
</form>
</article>
);
}
'React' 카테고리의 다른 글
[React] Create React App 프로젝트 구조 (0) | 2021.08.13 |
---|---|
[React] Class vs Function component (0) | 2021.08.02 |
[React] React 시작하기 (0) | 2021.07.26 |
[React] class와 function 컴포넌트 비교 / Hook이 생겨난 배경 (0) | 2020.08.10 |
[React] state와 setState (0) | 2020.07.22 |
- Total
- Today
- Yesterday
- 자료구조
- 입출력장치
- 최단경로
- 알고리즘
- C++
- 인접행렬
- stackframe
- Stack
- 클래스
- client side rendering
- dfs
- 동적프로그래밍
- 병행프로세스
- Java
- 재귀함수
- 스텍
- 교착상태
- BFS
- 이진탐색
- 구조체
- 세마포어
- server side rendering
- 퀵정렬
- react
- 배열
- C
- javascript
- 운영체제
- 소프트웨어
- 인접리스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |