해당 글은 프론트엔드를 공부하면서 기록 목적으로 작성한 내용입니다.
잘못된 내용이 있다면 제보 부탁드립니다. 🙇♂️
React TypeScript 프로젝트를 공부하면서 react router dom v6에서 발생한 TypeError에 대해 기록을 남기고자 한다.
사용 기술 : React
, TypeScript
, react router dom v6
useLocation
을 통해 state
를 넘겨 받았지만, 타입을 정의하지 않은 오류가 발생하였다.
import React, { useState } from "react";
import { useLocation, useParams } from "react-router-dom";
import styled from "styled-components";
...
const Coin = () => {
const [loading, setLoading] = useState(true);
const { coinId } = useParams();
const { state } = useLocation();
return (
<Container>
<Header>
<Title>{state?.name || "Loading..."}</Title>
</Header>
{loading ? <Loader>Loading...</Loader> : null}
</Container>
);
};
export default Coin;
먼저, state
로 받아온 name
을 string
타입으로 지정해 주었지만,
interface RouteState
를 알 수 없다는 오류가 발생하며 해결되지 않았다.
...
interface RouteState {
state: {
name: string;
};
}
const Coin = () => {
...
const { state } = useLocation<RouteState>();
return (
...
<Title>{state?.name || "Loading..."}</Title>
...
);
};
export default Coin;
useLocation
을 통해 state는 정상적으로 넘어오고 있는 것을 확인하였다.state
에 오류가 아닌 내가 type 지정을 잘못하고 있는 것은 아닌지 생각하며, 해결 방법을 계속 찾아보았다....
const location = useLocation();
console.log(location)
<>
형태가 아닌 as
를 사용하여야 한다는 것을 알았다.// v6
interface RouteState {
state: {
name: string;
};
}
const Coin = () => {
...
const { state } = useLocation() as RouteState;
return (
...
<Title>{state?.name || "Loading..."}</Title>
...
);
};
TypeScript가 익숙하지 않은 상황에서 오류가 발생하니, 타입 정의에 대한 문제인지 아니면 라이브러리를 사용해서 발생한 문제인지 원인을 찾는데 시간이 많이 소요되었다.
아직 TypeScript가 익숙하지 않아 초기에 겪은 문제라 생각하며, React TypeScript 프로젝트를 많이 만들어 보면서 여러 오류를 접하면 금방 익숙해질 것이라 생각한다. 오류를 두려워하지 말고 많이 접해보자!!!