쇼핑몰관련 질문드립니다.
73
작성자 없음
0 asked
쇼핑몰 만들기 부분을 보고 있는데요,
상품상세페이지 만드는데서 막히네요.
메인에서 제품을 누르면 로그인화면이 뜨고 로그인을 하면 다시 메인으로 가는거까지는 되었는데요,
거기서 다시 목록을 누르면 콘솔창에 해당하는 id정보가 나와야 하는데 App.jsx 에서 에러가 난다고 하는데 그대로 따라한 파일이라 어디가 틀린건지 잘 모르겠네요
import React, { useEffect } from 'react';
import { useParams } from 'react-router-dom';
const ProductDetail = () => {
let {id} = useParams();
const getProductDetail = async () => {
let url = `http://localhost:5000/products/${id}`;
let response = await fetch(url);
let data = await response.json();
console.log(data);
};
useEffect(()=>{
getProductDetail();
},[]);
return (
<div></div>
)
}
export default ProductDetail;
import './App.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import { useEffect, useState } from 'react';
import { Routes, Route } from 'react-router-dom';
import ProductAll from './page/ProductAll';
import Login from './page/Login';
import ProductDetail from './page/ProductDetail';
import Navbar from './component/Navbar';
import PrivateRoute from './route/PrivateRoute';
function App() {
const [authenticate, setAuthenticate] = useState(false);
//true이면 로그인이 됨, false이면 로그인이 안됨
useEffect(()=>{
console.log('aaa',authenticate);
},[authenticate]); //값이 바뀔때마다
return (
<div>
<Navbar/>
<Routes>
<Route path="/" element={<ProductAll/>}/>
<Route path="/login" element={<Login setAuthenticate={setAuthenticate}/>}/>
<Route path="/product/:id" element={<PrivateRoute authenticate={authenticate}/>}/>
</Routes>
</div>
)
}
export default App;
<Route path="/product/:id" element={<PrivateRoute authenticate={authenticate}/>}/>이부분이 에러가 뜨는거 같아요
Answer 2
1
안녕하세요, 인프런 AI 인턴입니다. gangsugi님.
상품 상세 페이지 작성 중 Redirect와 관련하여 코드에서 에러가 발생하는 것 같습니다. 현재 PrivateRoute 컴포넌트를 사용해 인증 여부에 따라 페이지 접근을 관리하시고 있는 것 같은데, 특정한 URL 패턴에 따라 다른 컴포넌트를 렌더링하는 방식에서 문제가 발생할 수 있습니다.
확인해야 할 사항:
PrivateRoute컴포넌트 내부에서의 컴포넌트 렌더링:
PrivateRoute컴포넌트가 렌더링할 내부 컴포넌트를Route태그에서 바깥으로 꺼낸 뒤,PrivateRoute내부에서 이를 중간에 넘겨주는 방식으로 구현해야 합니다. 이 과정에서 인증 상태에 따라 내부 컴포넌트가 조건부로 렌더링되도록 설정합니다.ProductDetail컴포넌트로 전달:
ProductDetail컴포넌트가 실제로Route컴포넌트의element로 들어갈 수 있도록 설정해야 합니다. 만약 로그인 상태라면ProductDetail을, 로그인이 안 되어 있을 경우에는Redirect나 로그인 컴포넌트를 렌더링토록 해야합니다.
아래의 내용들이 기존 코드에서 잘 적용되고 있는지 확인해 보세요. 아래의 URL은 유사한 문제를 다룬 자료입니다.
리액트 라우터의 인증 처리 - Route와 PrivateRoute 설정 - Redirect 처리와 PrivateRoute의 활용에 대해 설명합니다.
참고 코드 예제:
// PrivateRoute.js
import React from "react";
import { Navigate } from "react-router-dom";
const PrivateRoute = ({ authenticate, children }) => {
return authenticate ? children : <Navigate to="/login" />;
};
export default PrivateRoute;
// App.js의 수정된 부분
<Route path="/product/:id" element={
<PrivateRoute authenticate={authenticate}>
<ProductDetail />
</PrivateRoute>
}/>
이렇게 설정하시면 authenticate 상태에 따라 로그인 검증이 이루어지며, 목표 페이지로 이동하거나 로그인 페이지로 자동 Redirect 됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
모바일 버전에 쓰이는 이미지를 다운받고 싶어요
0
63
1
vite를 꼭 써야하나요
0
55
1
전체 소스코드는 어디서 받을 수 있나요?
0
238
1
소스코드는 어디서 받을 수 있는지요...
0
248
1
마지막 프로젝트 데모 페이지가 보이지 않습니다.
0
210
1
TMDB 사이트 API 가져오기
0
559
1
5.리덕스 유용한 툴 소개
1
287
1
json-server 최신버전이면 검색이 안나올 수 있습니다.
4
847
3
연락처 검색 버튼이 작동하지 않아요
0
371
1
영화 API
0
790
2
더보기..
0
364
1
미니 쇼핑몰 작업하는 중에 리스트가 잘 안나옵니다.
1
378
1
매칭되는 action이 없을 때 반환값이요
0
370
1
openweather api 호출 했는데 401가 나요!
0
1321
1
React-Router 설치중오류
0
1915
1
api 인터셉터사용시 post
0
405
1
상세페이지 api
0
373
1
netlify에 REACT_APP_API_KEY 환변경변수 추가하고 배포해도 API_KEY가 없다고 에러가 나옵니다
0
408
1
예고편
0
280
2
reducer는 함수라고 해서 function을 넣으셨는데...
0
304
1
프로젝트 진행하다가 오류가 나서 더이상 진행을 못하고 있습니다 ㅠ
0
389
2
num에 사용한 {}
0
220
1
여기서 똑같이 썻는데. 저는 에러가 나는데 혹시 해결방법을 알려주실수있을까요?
0
646
1
Home.js 데이터 출력에러 질문드립니다.
0
279
2

