: 컴포넌트 내부에서 바뀔 수 있는 값, 상태
: 앞에서 name이라는 정보를 const name="홍부인"
이라고 만들었는데, name 값이 바뀌어야하는 정보면 state로 생성해야 함
🔥 State 만들때는 useState() 사용
state를 만들어주는 useState는 React에서 제공하는 기능(=훅), React에만 존재
[ ]
빈 배열 생성: 처음값 = 초기값 = initial state
: state는 언제든지 변할 수 있기 때문에 '처음값'이라는 개념이 존재
: import에 {useState} 추가해주기
🔥 setValue(바꾸고 싶은 값)
: state 변경할때 사용하는 함수, 이걸로만 변경 가능
: Child 컴포넌트에 '할아버지 이름 바꾸기'라는 라벨을 가진 버튼 생성
: 버튼 눌렀을 때 setName 실행
: GrandFather에 있는 setName을 Child에 전달
-> 주고받고 주고받고 해서 전달
🔥 state는 새로고침하면 다시 초기값으로 바뀜. setstate로 바뀐값이 어디 저장되는 것이 아니라 화면상으로만 랜더링만 됨
🙋🏻♀️ 리액트 훅
🙋🏻♀️ 다른 훅 종류
🙋🏻♀️ const 는 변경할 수 없는 상수 인데, 어떻게 setState를 이용해서 값을 변경?
🙋🏻♀️ component lifeCycle
사용자가 웹사이트와 상호작용해서 어떤 상태를 변경시킬 수 있는 대표적인 사례 : input, button
-> input / button 에서의 useState 활용
: 어떤 버튼을 만들고, 그것을 클릭했을 때 state가 변경되기
: 버튼을 눌렀을 때 하고 싶은 행동을 함수로 만들기
-> React에서 함수와 컴포넌트(버튼) 연결하는 방법
: 버튼 누르면 state가 "길동이"에서 setName()의 값 "누렁이"로 바뀜
: input에서는 보통 사용자가 입력한 값을 state로 관리하는 패턴을 많이 사용
: input 값을 넣을 value라는 state 생성
🔥 function 키워드 사용하지 않고 화살표함수 사용
(화살표 함수, function 키워드 모두 함수 컴포넌트 만들 수 있음)
: input과 value 연결
=> 사용자가 input에 값을 입력하면, 그 값을 입력할 때마다(onChange 될 때마다) value라는 state에 setValue해서 넣어줌
=> value를 콘솔에 찍으면 입력할 때마다 value가 바뀜
: 이 과정을 통해 사용자의 input값을 state로 관리할 수 있음
🔥 event 객체는 React 개념이 아닌 HTML DOM event의 개념
: 메모리에 있는 값을 변경할 수 없음
: js의 데이터 형태 중 원시 데이터는 불변성이 있고, 원시 데이터가 아닌 데이터(객체, 배열, 함수)는 불변성이 없음
let number = 1
: 선언 시, 메모리에는 1이 저장됨
: number 변수는 메모리의 1을 참조
let secondNumber = 1
: 다른 변수 선언 시, 이미 메모리에 생성된 1을 참조
-> number와 secondNumber는 변수 이름은 다르지만, 같은 메모리값을 바라봄
=> number === secondNumber 는 true
let obj_1 = {name: ‘kim’}
(원시데이터가 아닌 데이터(객체, 배열, 함수))
: 메모리에 obj_1 저장
let obb_2 = {name: ‘kim’}
: obj_2라는 메모리 공간에 새롭게 저장
=> obj_1 === obj_2 는 false
기존에 1이던 number에 let number = 2
새로운 값을 할당하면?
: 기존 메모리에 저장된 1이라는 값이 변하지 않고, 새로운 메모리 저장공간에 2가 생기고, number 이라는 값을 새로운 메모리 공간에 저장된 2를 참조하게 함
-> 원시데이터는 불변성이 있으므로
기존에 ‘kim’이던 name에 obj_1.name = ‘park’
새로운 값을 할당하면?
: 기존 메모리 저장공간에 있는 {name: ‘kim’} 이라는 값이 {name : ‘park’} 으로 바뀜
-> 객체는 불변성이 없으므로
🔥 원시데이터 수정 시, 메모리에 저장된 값 자체를 바꿀 수는 없고 새로운 메모리 저장공간에 새로운 값을 저장
🔥 원시데이터가 아닌 데이터 수정 시, 기존에 저장되어 있던 메모리 저장공간의 값 자체를 바꿔버림
🔥 React에서는 화면을 리렌더링 할지 말지 결정할 때 state의 변화를 확인함
-> state가 변하면 리렌더링, 안변했으면 리렌더링 안함
state가 변했는지 안변했는지 확인하는 방법
: state의 변화 전후의 메모리 주소를 비교
=> 원시데이터가 아닌 데이터를 수정할 때 불변성 지켜주지 않음
=> 직접 수정하면 값은 바뀌지만 메모리 주소는 변함 없음
🔥 => 개발자가 값은 바꿨지만 React는 state가 변했다고 인지하지 못함 -> 리렌더링 못 일어남
배열을 setState 할 때 불변성을 지켜주기 위해, 직접 수정을 가하지 않고 전개 연산자를 사용해서 기존의 값을 복사하고, 그 이후에 값을 수정하는 식으로 구현
🙋🏻♀️ onChange, onClick 외에 다른 이벤트
🙋🏻♀️ 원시 데이터 타입
: 숫자, 문자열, 불
🙋🏻♀️ 객체, 배열, 함수의 불변성을 지키면서 값을 수정할 수 있는 메서드들