TIL

240909

playhong 2024. 9. 9. 17:20

FACTS(사실, 객관) : 내가 한 일

(1) 투두리스트 (베이직반)

 

문제발생

화면이 표시되지 않는 문제

콘솔, eslint 그 어디에서도 에러는 안뜨는데 화면상에 아무것도 뜨지 않는 문제를 발견. 

 

원인추론

언제부터 문제된건지? - 라우터 설정이후 (이전에는 정상적으로 표시됐음)

어디에서 문제된건지 모르겠어서 일단 여기저기 console.log를 찍어봄. 먼저 모든 화면에 뿌려주는 레이아웃 컴포넌트에 

const RootLayout = () => {
  console.log("dsfd"); // 디버깅용 콘솔로그
  return (
    <RootLayoutMain className="main-center">
      <RootLayoutContents>
        <Outlet />
      </RootLayoutContents>
    </RootLayoutMain>
  );
};

 

찍었더니 

 

콘솔에 잘 찍힌다!

아무래도 라우터 컴포넌트를 만들면서 잘못 작성한것 같아 그쪽을 위주로 확인

import { BrowserRouter, Routes, Route } from "react-router-dom";
import RootLayout from "./components/layout/RootLayout";
import Home from "./page/Home";
import TodoDetailPage from "./page/TodoDetailPage";

const Router = () => {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<RootLayout />}>
          <Route path="/" element={<Home />} />
          <Route path="/:id" element={<TodoDetailPage />} />
        </Route>
      </Routes>
    </BrowserRouter>
  );
};

export default Router;

 

Router.jsx 문제 없는것 같다.

import RootLayout from "./components/layout/RootLayout";
import TodoProvider from "./context/TodoContext";
import Router from "./Router";

const App = () => {
  return (
    <RootLayout>
      <TodoProvider>
        <Router />
      </TodoProvider>
    </RootLayout>
  );
};

export default App;

 

App.jsx 이상하다. Route.jsx에서 분명 <Route path="/" element={<RootLayout />}> 로 레이아웃을 넣어줬는데 여기에도 레이아웃이 있다.

 

해결방안

import RootLayout from "./components/layout/RootLayout";
import TodoProvider from "./context/TodoContext";
import Router from "./Router";

const App = () => {
  return (
      <TodoProvider>
        <Router />
      </TodoProvider>
  );
};

export default App;

 

이렇게 감싸고 있던 <RootLayout>을 지우고 나니 화면에 정상적으로 표시된다.

 


 

(2) mbti 테스트 사이트 만들기

 

문제발생

로그인 페이지 외 다른 페이지로 이동이 안됨

 

원인추론

1. 잘못된 URL설정

=> 확인 결과 아님 !! 중복해서 사용되는 url을 컴포넌트로 만들어 넣는 과정에서 모든 컴포넌트를 확인했는데 아니었음 ㅠ

2.   ProtectedRoute의 잘못된 설정

=> 확인 결과 아님 !! 

import { Navigate } from "react-router-dom";

const ProtectedRout = ({ user, children }) => {
  if (!user) {
    return <Navigate to="/login" />;
  }
  return <>{children}</>;
};

export default ProtectedRout;

 

이런 프로텍트 라우트를 설정했는데 이 부분을 주석처리하고도 같은 문제가 계속됨

 

해결방안

튜터님께 질문하러가서 한가지 문제 상황에서 특징을 발견

=> 화면이 깜빡임 => 이런 문제는 useEffect 에 의한 것. 관련 코드를 수정해야한다. 

확인 결과

레이아웃에 잘못 작성된 useEffect 코드를 발견

import { useEffect } from "react";
import { Link, Outlet, useNavigate } from "react-router-dom";

const Layout = ({ user, setUser }) => {
  const navigate = useNavigate();

  useEffect(() => {
    if (!user) {
      // 로그인 하지 않았다면
      navigate("/login"); // 로그인 페이지로 이동
    }
  }, [user, navigate]);

 

이런게 레이아웃컴포넌트에 있으니 당연히 로그인페이지로 이동할수밖에

아마 컴포넌트를 착각해서 잘 못 작성한 코드 같다

해당 useEffect 코드를 삭제하니 정상적으로 다른 페이지로의 이동도 가능해졌다.


(3) mbti 테스트 사이트 만들기

 

문제발생

로그인 / 회원가입시 에러가 뜸

로그인시 에러
회원가입시 에러

 

db.json에 이미 존재하지 않을 뿐더러 db.json에 회원가입한 내용이 쌓이지 않음

혹시나? 해서 같은 아이디로 로그인 해보니 

잉??

근데 여전히 로그인은 되지 않음

 

원인추론

AuthURL의 잘못된 설정? 잘 모르겠음

 

해결방안

해결못함

 


FEELINGS(느낌, 주관) : 나의 감정적인 반응, 느낌

너무어렵다!

제대로 굴러가던 코드도 이거저거 해보다가 망가뜨리고 아주 답답하다


FINDINGS(배운 것) : 그 상황으로부터 내가 배운 것, 얻은 것

문제 상황에서 화면이 깜빡인다! => useEffect 문제일 확률이 크다! 


FUTURE(미래) : 배운 것을 미래에는 어떻게 적용할 지

 

'TIL' 카테고리의 다른 글

240911  (0) 2024.09.11
240910  (0) 2024.09.10
240905  (0) 2024.09.05
240904  (0) 2024.09.04
240903  (0) 2024.09.03