'PrivateRoute'은(는) JSX 구성 요소로 사용할 수 없습니다.
해당 반환 형식 'Element | { children: ReactNode; }'은(는) 유효한 JSX 요소가 아닙니다.
'{ children: ReactNode; }' 형식에 'ReactElement<any, any>' 형식의 type, props, key 속성이 없습니다.
function PrivateRoute({ children }: { children: React.ReactNode }) {
let location = useLocation();
const { user } = useContext(UserContext);
return user ? (
{ children }
) : (
<Navigate to="/login" state={{ from: location }} />
);
}
<Route
path="/register"
element={
<PrivateRoute>
<Register />
</PrivateRoute>
}
/>
function PrivateRoute({ children }: { children: React.ReactNode }) {
let location = useLocation();
const { user } = useContext(UserContext);
return user ? (
<>{children}</>
) : (
<Navigate to="/login" state={{ from: location }} />
);
}
다음은 핵심적인 코드 부분입니다.
<>{children}</>
관련 에러를 검색 중 stackoverflow의 "여기" 링크에서 힌트를 얻었습니다.
에러 메세지 중, "JSX 구성 요소로 사용할 수 없다", "해당 반환형식이 유효하지 않다"는 부분에 주목했습니다.
현재 받아오는 children을 반환하는 데, children의 형식이 유효하지 않다는 판단을 했습니다
위 링크에서 다음과 같은 답변을 제공했습니다(저의 상황과 같지는 않지만,,,)
You need to return a JSX Element, not an array. Wrapping the whole component is a solution, but you need to do it outside of the map/filter function.
제가 작성한 children이 제대로 된 JSX ELEMENT가 아닌것으로 react가 인식하기 때문에
REACT FRAGMENT로서 빈 코드를 children에 감싸줬습니다
children이 JSX ELEMENT로서 인식되도록 <>..</>로 감싸줬습니다.
<>{children}</>