#3 [2021 UPDATE] STATE
#3.0 Understanding State
바뀌는 데이터
페이지를 로드했을 경우만 렌더링 되고, counter 업데이트 되지 않음
counter 렌더링 추가 - 전체 영역을 렌더링 하는게 아니라 counter 부분만 업데이트 됨
https://nomadcoders.co/react-for-beginners/lectures/3265
#3.1 setState part One
자동으로 리렌더링을 유발, 일으키는 방법
React.js가 우리가 원하는 부분 렌더링 처리
data를 담는 것과 업데이트 하는 방법
const data = React.useState(0);
console ===> [0, funcion]
0: data 초기값
1: data를 바꿀때 사용하는 함수
useState: 초기값 생성 가능
javascript 코드 사용
const food = ["tomato", "potato"]
const tomato = food[0];
const potato = food[1];
=> const [first, second] = food;
const [counter, modifier] = React.useState(0);
{counter}, {modifier} 변수 사용 가능
#3.2 setState part Two
const [counter, setCounter] = React.useState(0);
const onClick = () => {
setCounter(counter + 1);
}
setCounter 함수는 그 값으로 업데이트 하고 리렌더링 자동으로 발생
useState 함수는 데이터 건내주고, 함수도 함께 바꿔주고, 데이터 값이 바뀌고 컴포넌트도 동시에 리렌더링 => 업데이트
React 는 업데이트 사이사이마다, 정확히 어떤 것이 업데이트 됐는지 파악해서 HTML에 그 부분만 고침
#3.3 Recap
const [counter, setCounter] = React.useState();
counter는 현재의 값 state 이며, setCounter는 이벤트 발생 시 변화를 주는 부분이어서 이후 counter로 다시 저장된다
실제로 바뀌는 값만 판단해서 자동으로 리렌더링
#3.4 State Functions
state를 세팅하는 데는 2가지 방법이 있다.
1. 직접 설정: setState(state +1)
-> 현재 state랑 관련이 없는 값을 새로운 state로 하고싶은 경우
2. 함수 전달: setState(state => state +1)
(함수의 첫번째 인자는 현재 state 임
setState안에 function 들어가도 됨)
state가 확실히 현재 값이라는 것을 보장함
예상치 못한 업데이트가 어디선가 일어나도 혼동을 방지해줌
-> 현재 state를 바탕으로 다음 state를 계산 해주고 싶은 경우
#3.5 Inputs and State
JSX는 HTML과 유사하지만 다른 점이 몇가지 존재함
1. class(javascript) -> className (JSX)
2. for -> htmlFor
3. value=‘’ -> value
React 에서의 event는 가짜 event SyntheticBaseEvent 발생되는데 event 최적화 시킴
기존 javascript의 event는 nativeEvent
target은 방금 바뀐 input 의미
event.target.value
데이터를 업데이트 할 수 있는 방법은 setState 함수 사용
const onChange = (event) => {
setMinutes(event.target.value);
};
#3.6 State Practice part One
input 값을 외부에서도 수정하기 위해서
value={minutes} 사용
#3.7 State Practice part Two
const [flipped, setFlipped] = React.useState(false);
const onFlip = () => setFlipped(current => !current);
// const onFlip = () => setFlipped(!filped);
<input disabled={flipped}>
prop 전달
state 2개 사용
const [amount, setAmount] = React.useState(0);
const onFlip = () => {
reset();
setFlipped((current) => !current);
}
<input id="minutes" value={flipped ? amount * 60 : amount} />
<input id="hours" value={flipped ? amount : Math.round(amount / 60)} />
#3.8 Recap
<button onClick={onInvert}>{inverted ? "Turn Back": "Invert"}</button>
state 세팅하는 방법 알아보는 시간
#3.9 Final Practice and Recap
리렌더링 조건
1. props 바뀔 때
2. state가 바뀔 때
3. 부모 컴포넌트가 리렌더링 될 때
{ index === "0" ? <MinutesToHours /> : null }
{ index === "1" ? <KmToMiles /> : null }
'Front-end > React.js' 카테고리의 다른 글
#4 [2021 UPDATE] PROPS (0) | 2022.02.20 |
---|---|
#2 [2021 UPDATE] THE BASICS OF REACT - nomadCoder (0) | 2022.02.14 |
React 공부 시작 - 노마드 코더 강의 (0) | 2022.02.08 |