1. State
1) 개념
- 리액트에서의 state는 리액트 컴포넌트의 상태(컴포넌트의 데이터)를 의미 -> 리액트 컴포넌트의 변경 가능한 데이터
- 리액트 컴포넌트는 개발자가 직접 정의해서 사용하게 됨
- 렌더링이나 데이터 흐름에 사용되는 값만 state의 포함시켜야 함
-> state가 변경될 경우 컴포넌트가 재렌더링 되기 때문에 성능저하에 문제가 있을 수 있음, 그렇지 않은 값은 컴포넌트 인스턴스의 필드로 정의
2) 특징
- state는 자바스크립트 객체
class LikeButton extends React.Component {
// 클래스 컴포넌트의 경우 state를 생성자에서 정의(cf. 함수컴포넌트는 state를 usestate()라는훅을 사용해서 정의)
// constructor() 함수는 생성자, 클래스가 생성될 때 실행되는 함수
constructor (props) {
super (props);
// 현재 컴포넌트의 state를 정의하는 부분
this.state = {
liked: false
};
}
}
- state는 setState함수를 사용하여 수정해야함
this.setState({
name: 'sky'
});
3) state 사용법
import { useState } from 'react';
let[변경전, 변경후] = useState(보관할데이터);
state 변경
state변경함수(새로운state)
array/object 데이터 state의 변경 '기존state == 신규state' 인 경우 변경 안해줌 array/object를 담은 변수는 참조값만 저장됨 [...배열명] 이런식으로 독립적인 copy 배열을 만들어서 변경시켜줘야함 |
2. 생명주기(Life Cycle)
3. Shared State(공유된 스테이트)
- 자식 컴포넌트들이 공통된 부모 컴포넌트의 state를 공유해서 사용하는 것
1) 하위 컴포넌트에서 state 공유하기(state 끌어올리기)
- 어떤 컴포넌트의 state에 있는 데이터를 여러 개의 하위 컴포넌트에서 공통적으로 사용하는 경우
- 하위 컴포넌트의 state를 공통된 부모 컴포넌트로 끌어올려서 공유하는 방식
const scaleNames = {
c: "섭씨",
f: "화씨",
};
// TemperatureInput 컴포넌트는 props로 scale과 Temperature를 받아서 표시해줌
function TemperatureInput(props) {
const handleChange = (event) => {
props.onTemperatureChange(event.target.value);
};
return (
<fieldset>
<legend>
온도를 입력해주세요(단위:{scaleNames[props.scale]}):
</legend>
{/* 온도 value가 변경된 경우 props의 onTemperatureChange()함수 호출하여 상위 컴포넌트로 변경된 값 전달 */}
<input value={props.temperature} onChange={handleChange} />
</fieldset>
);
}
export default TemperatureInput;
'Front-end > React' 카테고리의 다른 글
[React] 이벤트 핸들링(Event Handling) (0) | 2023.05.13 |
---|---|
[React] 훅(Hook) (0) | 2023.05.11 |
[React] 컴포넌트(Component) (0) | 2023.05.09 |
[React] 리액트 엘리먼트(element) 렌더링 (0) | 2023.05.07 |
[React] JSX(JavaScript and XML) (0) | 2023.05.07 |