state는 상태라는 뜻으로 컴포넌트 내부에서 가지고 있는 컴포넌트의 상태값이다.
화면에 보여줄 컴포넌트의 UI 정보(상태)를 지니고 있는 객체이고,
해당 컴포넌트 내에서 정의하고 사용하며 데이터가 변경 될 수도 있다.
state는 값이 바뀔 내용의 초기값을 만들어줄때 사용되고,
값이 바뀌는걸 설정하고 싶으면 setState를 만들어서 바뀔 값을 가져온다.
class State extends React.Component {
constructor() {
super();
this.state = {
color: 'red' //key:value
};
}
import React, { Component } from 'react';
class State extends Component {
constructor() {
super();
this.state = {
color: 'red',
};
}
handleColor = () => {
this.setState({
color: 'blue'
})
}
render() {
return (
<div>
<h1 style={{ color: this.state.color }}>Class Component | State</h1>
<button onClick={this.handleColor}>Click</button>
</div>
);
}
}
export default State;
<button>
요소에서 onClick
이벤트 발생this.handleColor
, 즉 현재 컴포넌트(State
)의 handleColor
함수 실행handleColor
함수 실행 시 setState
함수 실행 - state의 color
값을 'blue'
로 변경render
함수 호출<h1>
태그 글자 색상 변경(초기값만들어주는 부분, 바뀔값 만들어주는 부분)
class Feed extends React.Component {
constructor() {
super();
this.state = { //내부 컴포넌트 초기상태값 만들어주기
color: "#0094f64b",
newComment: "",
comments: [[{ id: 0, userId: "", comment: "" }]],
};
}
commentValue = (e) => {
this.setState({ //이벤트가 들어왔을때 바뀔값 만들어주기
newComment: e.target.value,
});
};
Props는 컴포넌트의 속성값이라는 뜻을 가지고 있다.
부모컴포넌트로 부터 물려 받은 데이터를 가지고 있는 속성이다.
그래서 props를 통해서 부모 컴포넌트와 소통할 수 있다.
부모 컴포넌트의 속성값을 자식컴포넌트한테 넘겨줄때
<Title title="HELLO!" sub="Welcome, dodohee blog"></Title>
자식컴포넌트가 부모컴포넌트의 속성값을 사용해줄때
<h1>{this.props.title}</h1>
class Title extends Component {
render() {
return (
<header>
<h1>{this.props.title}</h1>
{this.props.sub}
</header>
);
}
}
class Main extends Component {
render() {
return (
<div>
<Title title="HELLO!" sub="Welcome, dodohee blog"></Title>
</div>
);
}
}
export default Main;
//Parent.js
import React from 'react';
import Child from '../pages/Children/Children';
class Parent extends React.Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
render() {
return (
<div>
<h1>Parent Component</h1>
//부모컴포넌트에 프롭스하는 법
<Child titleColor={this.state.color}/>
</div>
);
}
}
export default State;
이렇게 부모컴포넌트 내부에 state값을 만들어주고,
// Child.js
import React from 'react';
class Child extends React.Component {
render() {
// console.log(this.props); 항상 props가 잘 되고 있는지 확인하기 위해 콘솔
return (
<div> // 자식컴포넌트에 프롭스 하는법
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
</div>
);
}
}
export default State;
// Parent.js
import React from 'react';
import Child from '../pages/Children/Children';
class Parent extends React.Component {
constructor() {
super();
this.state = {
color: 'red'
};
}
handleColor = () => {
this.setState({
color: 'blue'
})
}
render() {
return (
<div>
<h1>Parent Component</h1>
<Child titleColor={this.state.color} changeColor={this.handleColor}/>
</div>
);
}
}
export default State;
// Child.js
import React from 'react';
class Child extends React.Component {
render() {
// console.log(this.props);
return (
<div>
<h1 style={{color : this.props.titleColor}}>Child Component</h1>
<button onClick={this.props.changeColor}>Click</button>
</div>
);
}
}
export default State;
<button>
요소에서 onClick
이벤트 발생this.props.changeColor
실행changeColor
, 즉 부모 컴포넌트로부터 전달받은 handleColor
함수 실행handleColor
함수 실행 시 setState
함수 호출 - state의 color
값을 'blue'
로 변경render
함수 호출<Child />
컴포넌트에 변경된 state 데이터(this.state.color
) 전달this.props.titleColor
를 글자 색상으로 지정하는 <h1>
타이틀 색상 변경