개발자
상태 관리 라이브러리로는 zustand를 사용하고 있습니다. 지금 생각나는 것은 context provider와 useEffect 정도인데, useEffect는 이전 값이 남아있어 렌더링 시 잔상이 보이는 문제가 있더라고요 ㅠㅠ 그래서 useefftect return에도 setter를 넣어줬는데.. 혹시 다른 방법이 있을까 싶어서.. 질문 드립니다. 컴포넌트 생성 시와 종료에 맞춰 값을 변경해주고 싶은 상황입니다.
답변 2
컴포넌트의 마운트 시점에 전역 컨텍스트에 값을 set 하고, 그값을 동시에 렌더링 하고 싶으시다고 이해가 됩니다. zustand 를 사용해보진 않았지만, 의견을 남겨봅니다. 해당 컴포넌트가 전역상태를 구독하고 있고, 마운트 시점에 setter 로 값을 할당하게 되면 업데이트 시점이 늦어져서 빈화면이 보이게 되는 문제 같습니다. 이렇게되면 setter 를 호출하는 시점에서부터 컴포넌트의 Render Phase가 되기전에 값을 할당할수가 없을것 같습니다. 값이 비어있을때 엘리먼트를 return 하지 않게 하거나 로더, 스켈레톤 UI 등을 사용해서 잠시 비어있는 화면을 채워 두는 방법도 가능할것 같습니다. 도움이 되진 않겠지만 useEffect 대신 useLayoutEffect 를 사용하면 Render Phase 에 진입하기 전에 useLayoutEffect 의 콜백함수가 실행됩니다. 그렇다고 하더라도 상태를 업데이트 하는 과정이 들어있다면 컴포넌트가 렌더링 된후 상태가 업데이트 되며 리렌더링 하게 될수 있습니다. 가급적이면 사용할 전역 상태에 초기값을 가지고 있을수 있도록 설계 해주시거나, 상위 컴포넌트에서 props 로 데이터만 해당 컴포넌트로 보내주는 방법이 좋을것 같습니다.
익명
작성자
2023년 04월 13일
의견 감사합니다! 많이 배워 갑니다 🙏
컴포넌트가 생성되거나 종료될 때 전역 상태를 업데이트하려면, ' useEffect '를 사용하여 컴포넌트가 마운트되거나 언마운트 될 때 필요한 액션을 수행하는 것이 좋습니다. 이전 값이 남아있어 렌더링 시 잔상이 보이는 문제를 해결하기 위해, 컴포넌트가 언마운트 될 때 초기 상태를 설정하는 것이 중요합니다. 여기서는 ' zustand '를 사용하고 있으므로, 상태 관리를 위한 커스텀 훅을 사용하여 필요한 동작을 수행할 수 있습니다. 아래는 예제 코드입니다. 1. 먼저, ' zustand '를 사용하여 전역 상태 관리를 설정하세요. 2. 그런 다음, 컴포넌트에서 ' useEffect '를 사용하여 컴포넌트가 마운트될 때 데이터를 설정하고 언마운트 될 때 데이터를 초기화하세요. 이 방법을 사용하면 컴포넌트 생성 시와 종료에 맞춰 전역 상태 값을 변경할 수 있습니다. 이렇게 하면 렌더링 시 이전 값이 남아있는 문제도 해결됩니다. ----- ✅ Chat GPT의 답변을 평가해 주세요! 틀린 내용은 없는지, 답변이 도움이 되었는지 댓글로 작성해 주세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#1 import create from 'zustand'; const useGlobalState = create((set) => ({ data: null, setData: (newData) => set({ data: newData }), resetData: () => set({ data: null }), })); #2 import React, { useEffect } from 'react'; import useGlobalState from './useGlobalState'; const MyComponent = () => { const { setData, resetData } = useGlobalState(); useEffect(() => { setData({ ... }); // 초기 데이터를 설정합니다. return () => { resetData(); // 컴포넌트가 언마운트될 때 데이터를 초기화합니다. }; }, []); // 빈 배열을 의존성으로 전달하여 useEffect를 마운트 및 언마운트 시에만 실행되도록 합니다. // 컴포넌트 렌더링 로직... }; export default MyComponent;
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!