codestates / codestates/aneun-dongne

[Error Handling Log] 리액트 props로 전달받은 변수를 useState에 넣을때 무한루프가 걸린다. -> useEffect로 해결/ 류준열

Open
#81 0 comments 0 reactions 0 assignees View on GitHub
client Error Handling Log
Dominant language
JavaScript
Stars
6
Forks
7
PR merge metrics
No merged PRs in 30d

Description

> ### 어떤 에러인가요?
> 리액트 무한루프 렌더링
- props로 전달받은 변수를 setState에 넣을때 무한루프가 걸렸다.(이게 이번상황에만 국한되는건지 원래이런건지는 아직 확실하지 않다.)
- -> 수정 : 일반적인상황은 아님
- -> 12/13일 원인 알아냄 : useEffect로 해결된 이유는 useEffect를 사용하기 전에는 다른 요소들에 의해 해당기능이 영향을 받아 무한루프가 일어났던 것이다.
```js
useEffect(()=>{원하는기능},[])
첫번째 인자 : 실행하려는 기능이 담긴 콜백함수,
두번째 인자 : 배열 -> 배열안의 값들이 바뀔때만 첫번째 인자 콜백이 실행된다.
```
useEffect의 두번째 인자에 들어가는 배열이 이 에러를 해결하는 열쇠인데, 두번째 배열에 있는 값들에 변화가 있을때만 콜백이 실행되기 때문에
해당 기능을 sideEffect로부터 완벽하게 보호할 수 있는것이다.
> ### 에러 메시지
스크린샷 2021-12-05 오전 3 08 15

> ### 에러 핸들링 방법
> - useEffect를 사용하여 렌더링순서를 제어한다.
> ### 핸들링 방법에 대해서 간단하게 기록해보세요.
> - 전 : `setText(comment.text)`가 sideEffect에 노출되어 있기에 이리저리 휘둘리다 무한루프가 된다.
![스크린샷 2021-12-05 오전 3 08 59](https://user-images.githubusercontent.com/66232436/144720014-1b756c38-4eff-4ac1-b566-376f40688ff6.png)
> - 후 : `setText(comment.text)`가 오.직 첫 렌더링시에만 실행된다. 그리고 끝.
![스크린샷 2021-12-05 오전 3 09 25](https://user-images.githubusercontent.com/66232436/144720025-a02beb0c-ae80-4da1-9e9c-38e1783103b5.png)

- 다음은 리액트의 렌더링조건이다.

![스크린샷 2021-12-05 오전 3 28 13](https://user-images.githubusercontent.com/66232436/144720550-1fabfe4a-f6e4-4196-b346-3d0351537860.png)

----- 아래 내용은 내가 이 에러핸들링로그를 처음 적을때 sideEffect에 의한 에러인지 모르고 적었던 내용임----
React의 useState렌더링은 비동기로 이루어진다.

때문에 개발자의 예측대로 렌더링이 되지 않고 꼬여버린다.

```javascript
const [text,setText] = useState('bye')
..생략..
setText('hi') //5초걸린다 가정
console.log(text)//2초걸린다 가정

이런상황에서는 5초동안 setText('hi')를 기다리지 않고
그냥 console.log(text)를 해버리기 때문에 초기값 'bye'가 출력된다.

다들 한번씩은 useState값이 밀려서 렌더링되는 경우를 확인했을텐데 이 때문이다.

---
useEffect(()=>{
console.log(text)
},[text])

useEffect는 렌더링이 된 이후에 실행되기 때문에 , DOM이 업데이트 되었음을 보장한다.
위 함수는 text값이 바뀔때마다 console.log(text)를 한다는 뜻이다.
즉 두번째 인자 배열안의 값들이 바뀔때마다 useEffect의 첫번째 인자인 콜백을 무조건 실행한다.

이런방식으로 개발자는 리액트의 렌더링순서를 제어할 수 있다.
```

> ### 에러 핸들링을 위해 참고한 레퍼런스 링크
> 링크: https://velog.io/@eunjin/React-useEffect-%EB%AC%B4%ED%95%9C%EB%A3%A8%ED%94%84-%ED%83%88%EC%B6%9C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the issue body’s useState and useEffect examples and the linked reference article. The issue does not name a file, test, or specific documentation location; a documentation change would be complete only after a concrete target and scope are identified.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, react
Domain
frontend
Issue type
Documentation
Difficulty
1/5
Estimated time
Under an hour
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.