-
Notifications
You must be signed in to change notification settings - Fork 1
useNavigate를 추가한 순간 리렌더 범위가 확장된 건에 대하여..
Soobeen Yoon edited this page Dec 6, 2022
·
6 revisions
const Header = (): ReactElement => {
const [login, setUserLogin] = useAtom(loginStateAtom);
return (
<Wrapper>
<FlexGrow3>
<Button context={<img src={LongLogo} />} />
</FlexGrow3>
{!login && (
<Button
context={<Text text={'Sign in'} fontFamily="roboto" />}
onClick={() => setUserLogin(!login)}
margin={'0 3vw 0 0'}
/>
)}
{!login && <Button context={<Text text={'Sign up'} fontFamily="roboto" />} />}
{login && (
<Button context={<Text text={'Sign out'} fontFamily="roboto" />} onClick={() => setUserLogin(!login)} />
)}
</Wrapper>
);
};
const Header = (): ReactElement => {
const [login, setUserLogin] = useAtom(loginStateAtom);
const navigate = useNavigate();
return (
<Wrapper>
<FlexGrow3>
<Button context={<img src={LongLogo} />}/>
</FlexGrow3>
{!login && (
<Button
context={<Text text={'Sign in'} fontFamily="roboto" />}
onClick={() => setUserLogin(!login)}
margin={'0 3vw 0 0'}
/>
)}
{!login && <Button context={<Text text={'Sign up'} fontFamily="roboto" />} />}
{login && (
<Button context={<Text text={'Sign out'} fontFamily="roboto" />} onClick={() => setUserLogin(!login)} />
)}
</Wrapper>
);
};
-
const navigate = useNavigate();
코드를 추가한 순간부터 리렌더 범위가 확장되었습니다.- Header 컴포넌트 내부가 리렌더되지 않았는데, 갑자기
Header
컴포넌트가 리렌더 되기 시작했어요..
- Header 컴포넌트 내부가 리렌더되지 않았는데, 갑자기
ㄴ 범인 찾았습니다. useNavigate custom하기
- 감사합니다 준태님
const Header = (): ReactElement => {
const [login, setUserLogin] = useAtom(loginStateAtom);
return (
<Wrapper>
<FlexGrow3>
<Link to="/">
<Button context={<img src={LongLogo} />} />
</Link>
</FlexGrow3>
{!login && (
<Button
context={<Text text={'Sign in'} fontFamily="roboto" />}
onClick={() => setUserLogin(!login)}
margin={'0 3vw 0 0'}
/>
)}
{!login && <Button context={<Text text={'Sign up'} fontFamily="roboto" />} />}
{login && (
<Button context={<Text text={'Sign out'} fontFamily="roboto" />} onClick={() => setUserLogin(!login)} />
)}
</Wrapper>
);
};
-
react-router-dom
의 Link도 FE 상태가 날아가지 않음.
A <Link> is an element that lets the user navigate to another page by clicking or tapping on it.
In react-router-dom, a <Link> renders an accessible <a> element with a real href that points to the resource it's linking to.
This means that things like right-clicking a <Link> work as you'd expect.
You can use <Link reloadDocument> to skip client side routing and let the browser handle the transition normally (as if it were an <a href>).
- Link Component는
<a href>
처럼 페이지 이동을 할 수 있도록 하며, 상태가 유지됨! - 다만, 페이지 이동 시 검증 등 추가 로직이 들어가거나, 어떤 함수의 결과로 페이지 이동이 발생해야 하면
useNavigate
, 아닌 경우에는Link
Component를 사용하는 것이 좋다.
- OaO 환경설정 A to Z
- CRLF 너가 뭔데 날 힘들게 해?
- Github Issue 똑똑하게 사용하기
- OAO! CI CD 적용기 with release 자동화
- 매번 다른 import문
- 못생긴 상대경로에서 간zlzl존 절대경로로😎
- TodoList API 개발기
- 의존성 주입으로 DB를 바꿔보자
- 렌더링 최적화 서막: useNavigate를 추가한 순간 리렌더 범위가 확장된 건에 대하여
- 렌더링 최적화 1탄: 렌더링 범위에 대하여 (by 최적화무새)
- 렌더링 최적화 2탄: 잘못된 custom hook 사용,, 전체 리렌더링을 부르다,,
- 렌더링 최적화 3탄: Todo 상세 좀 봤다고 테이블 전체가 재렌더링 되는건을 고치기😌
- 렌더링 최적화 4탄: 다이어그램 편
- 🐁 마우스 상대위치 계산은 이상해
- React 컴포넌트에 애니메이션을 적용해보자 🏃🏻💨
- 컴포넌트 재사용성을 높여보자: Modal 분리기 🌹
- 선후관계를 자동완성으로 추가해보자 🔎