(React) useState

기완·2021년 6월 27일
0

React basic

목록 보기
7/8

-useState https://velog.io/@velopert/react-hooks
const [value, setValue] = useState(0); -배열 비구조화 할당
카운터의 기본값을 0 으로 설정하겠다는 의미입니다. 이 함수가 호출되고 나면 배열을 반환하는데요, 그 배열의 첫번째 원소는 상태 값이고, 두번째 원소는 상태를 설정하는 함수입니다. 이 함수에 파라미터를 넣어서 호출하게 되면 전달받은 파라미터로 값이 바뀌게 되고 컴포넌트는 정상적으로 리렌더링 됩니다.
useState 를 여러번 사용하기
하나의 useState 함수는 하나의 상태 값만 관리를 할 수 있기 때문에 만약에 컴포넌트에서 관리해야 할 상태가 여러 개라면 useState 를 여러번 사용하시면 됩니다.
useEffect
useEffect 는 리액트 컴포넌트가 렌더링 될 때마다 특정 작업을 수행하도록 설정 할 수 있는 Hook 입니다. 클래스형 컴포넌트의 componentDidMount 와 componentDidUpdate 를 합친 형태로 보아도 무방합니다.
2.1 마운트 될 때만 실행하고 싶을 때
만약 useEffect 에서 설정한 함수가 컴포넌트가 화면에 가장 처음 렌더링 될 때만 실행되고 업데이트 할 경우에는 실행 할 필요가 없는 경우엔 함수의 두번째 파라미터로 비어있는 배열을 넣어주시면 됩니다.
기존의 useEffect 코드를 다음과 같이 변경해보세요. 젤뒤에 빈배열

Info.js - useEffect
useEffect(() => {
console.log('마운트 될 때만 실행됩니다.');
}, []);

2.2 특정 값이 업데이트 될 때만 실행하고 싶을 때
useEffect 를 사용 할 때 특정 값이 변경이 될 때만 호출하게 하고 싶을 경우도 있을 것입니다. 만약 클래스형 컴포넌트라면 다음과 같이 작성하겠죠.

componentDidUpdate(prevProps, prevState) {
if (prevProps.value !== this.props.value) {
doSomething();
}
}
바로, useEffect 의 두번째 파라미터로 전달되는 배열 안에 검사하고 싶은 값을 넣어주시면 된답니다.

한번 Info 컴포넌트의 useEffect 부분을 다음과 같이 수정해보세요.

Info.js - useEffect
useEffect(() => {
console.log(name);
}, [name]);

2.3 뒷정리 하기
useEffect 는 기본적으로 렌더링 되고난 직후마다 실행되며, 두번째 파라미터 배열에 무엇을 넣느냐에 따라 실행되는 조건이 달라집니다.
만약 컴포넌트가 언마운트되기 전이나, 업데이트 되기 직전에 어떠한 작업을 수행하고 싶다면 useEffect 에서 뒷정리(cleanup) 함수를 반환해주어야 합니다.

useReducer
useReducer 는 useState 보다 컴포넌트에서 더 다양한 상황에 따라 다양한 상태를 다른 값으로 업데이트해주고 싶을 때 사용하는 Hook 입니다. 리듀서(reducer) 라는 개념은 조만간 다루게 될 Redux 를 배우게 될 때 더 자세히 알아보게 됩니다.

함수컨포넌트 :
name, setName(name을바꿔주는)
setName {name:'''} 이렇게 안하고 setName옆에 name이 있기에 그냥 문자만
쓴다. render 가 나오고 그다음 토니가 입력
-setName('토니")를 handlename함수밖에 쓰면 무한실행이 된다.
return 뒤에

{name}님 안녕하세요!

이렇게 this.state.안쓴다.

원하는 타이밍떄마다 useEffect에게 전달해주고함수를 실행

그리고 [의존성 배열(여러개쓸수있다)]에 타이밍 전달
타이밍전달x시 render 마다 실행

빈배열이 오면 (컨디마) 라고 생각하면됌 - 한번은무조건 되고나서 다시실행x
ex)

count ㄱ ㅏ바뀔때만 useEffect 실행
handleName에서는 실행이 안되고 가만히있음

render 불리기전이기에 2번은 토니 그대로

props를 인자로 받지만 객체를 바로 구조분해할당해서 아래로 표현

profile
기록하는 습관을 기를 수 있을까....?!

0개의 댓글