인프런 커뮤니티 질문&답변

정문채님의 프로필 이미지
정문채

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

리액트 렌더링 최적화 관련 질문드립니다.

작성

·

409

0

안녕하세요. 렌더링 최적화 관련해서 질문드립니다.

const [ modalsetModal ] = useState(false);
  const modalOpen = useCallback(
    () => {
      setModal(true);
    }, [modal]
  );
  const modalClose = useCallback(
    () => {
      setModal(false);
    }, [modal]
  )
  return (
    <div>
      <Container>
        <Row>
          <Col sm={12} md={6}>
            <WorkList />
          </Col>
          <Col sm={12} md={6}>
            <BoardList 
              opens={modalOpen}
            />
          </Col>
        </Row>
        <Row>
          <Col sm={12} md={6}>
            <OrderChart />
          </Col>
        </Row>
        <Modal
          show={modal} 
          onHide={modalClose}
          size="lg"
          centered
        >
          <Modal.Header>
            <Modal.Title>test</Modal.Title>
          </Modal.Header>
          <Modal.Body>test</Modal.Body>
          <Modal.Footer>
            <Button variant="secondary" onClick={modalClose}>
              Close
            </Button>
          </Modal.Footer>
        </Modal>
      </Container>
    </div>
 );

위 컴포넌트에서 모달을 띄우는것인데 BoardList 컴포넌트에서 모달을 여는 useState함수를 내려줘서 끌어올리는 방식으로 하려하는데 

저 BoardList 컴포넌트가 재렌더링되고있습니다.

BoardList 컴포넌트는 React.memo를 사용했으나 아무래도 모달을 열때 끌어올려져서 useState가 새로 생성되면서 props가 새로 전달되여 props가 업데이트되어서 BoardList를 재 렌더링하는 현상이 문제인거같은데 이부분을 어떻게 잡으면 좋을까요? 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

opens={modalOpen}가 바뀌어서 리렌더링 되는 것인데요. 해당 prop을 부모에서 받는게 아니라 BoardList에서 리덕스같은 글로벌 컨텍스트로 처리해야 할 것 같습니다. props가 전달되는 이상 막기 어렵습니다.

정문채님의 프로필 이미지
정문채
질문자

그렇다면 모달 열리고 닫히는 부분도 리덕스나 useReducer 같은 상태관리로 해야 가능하다는 말씀이시군요... 알겠습니다. 감사합니다~

정문채님의 프로필 이미지
정문채

작성한 질문수

질문하기