ตอบโต้ Router Dom ยังไงเพื่อเปลี่ยนปลายทางจดหมายไปอีก App.js เส้นทางตอนที่คุณอยู่ที่ไหน subRoute ของเส้นทาง[ที่ซ้ำกัน]

0

คำถาม

ฉันยังใหม่ที่จะทำอย่าง&ตอบโต้ router dom v5 เหมือนกันของฉันภาษาอังกฤษแย่แน่ๆ ขอบคุณล่วงหน้าสำหรับช่วยเหลือชั้นนะคะ.

ปัญหาของฉัน: ฉันมี 2 หลักเส้นทางในของฉัน App.js เส้นทาง

import { Suspense } from 'react';
import {BrowserRouter as Router, Switch, Route} from 'react-router-dom'

/* Pges */
import AdminContainer from './Pages/Admin/AdminContainer';
import PublicContainer from './Pages/Public/PublicContainer';
import NotFound from './Pages/NotFound'
import AuthContainer from './Pages/Auth/AuthContainer';

/* Protected Route */

/* Helpers */

function App() {
  console.log("APP")
  return (
    <Suspense fallback={(<p>Loading</p>)}>
      <Router>
        <Switch>
          <Route path="/auth" component={AuthContainer} />
          <Route path="/admin" component={AdminContainer} />
          <Route path="/*" component={PublicContainer} />
          <Route path="*" component={NotFound} />
        </Switch>
      </Router>
    </Suspense>
    )
  }
export default App;

ที่ authcontainer มี 2 ย่อยเส้นทาง "/signin" "/signup"

import React from "react";
import {
  BrowserRouter as Router,
  Switch,
  Route,
  withRouter
} from "react-router-dom";

// PAGES
import Signin from "../Auth/Signin";
import Signup from "../Auth/Signup";

const AuthContainer = () => {
  console.log("AUTH")
  return (
    <div>
      <Router>
        <Switch>
          <Route exact path="/auth" component={Signin}/>
          <Route exact path="/auth/signin" component={Signin}/>
          <Route exact path="/auth/signup" component={Signup}/>
        </Switch>
      </Router>
    </div>
  );
};

export default withRouter(AuthContainer);

งั้นคนของฉัน publiccontainer มี 3 ย่อยเส้นทาง "/" "/ผลิตภัณฑ์" "/mycart"

/* Dependencies */
import { Route, Switch, BrowserRouter as Router } from 'react-router-dom'

/* Components */
import Header from "../../Components/Header"
import Products from "./Products"
import Home from "./Home"
import UserProfile from "../User/AccountProfile"

import MyCart from '../Public/MyCart'

const PublicContainer = () => {
    console.log("PUBLIC")
    return (
        <div>
            <Router>
                <Header />
                <Switch>
                    <Route exact path='/' render={(props) => <Home />} />
                    <Route exact path='/products' render={(props) => <Products />} />
                    <Route exact path='/mycart' render={(props) => <MyCart isAuth={false} />} />
                </Switch>
               </Router>
        </div>
    )
}

export default PublicContainer

คนของฉันถเข็นส่วนประกอบเดียวที่จะจัดการพาถ้า isAuth เป็นความจริงอื่นที่มันจะเปลี่ยนปลายทางจดหมายไป"/auth/signin"

import React from 'react'
import { Redirect } from 'react-router'

const MyCart = ({isAuth}) => {
    if(!isAuth)
        return (<Redirect  from='*' to='/auth/signin'></Redirect>)
    return (
        <div>
            my cart
        </div>
    )
}

export default MyCart

ปัญหาคือมันพยายามจะเปลี่ยนปลายทางจดหมายที่"/auth/signin"แต่มันยังอยู่ที่"/"หน้า enter image description here

ตอนที่ฉันโดนเรียกมันใหม่ในที่สุดก็เปลี่ยนปลายทางจดหมายไป"/auth/signin"enter image description here

แล้วฉันจะแก้ตัวได้ยังปัญหาฉันขอบคุณมากสำหรับคุณช่วย

ปรับปรุง

นี่เป็นแค่จุดเริ่มต้นของสิ่งของฉันวางแผนเส้นทาง enter image description here

โดยอย่างที่ฉันคิดว่าเมื่อตอนที่ mycart isAuth คือปลอมงั้นมันพยายามเชื่อมโยงไปยัง/auth/signin ซึ่งทำให้การเชื่อมต่ออยู่ด้านบนสุดที่อยู่ url ที่ถูกต้องจุดที่ auth signin แต่หลังจากนั้นมันเพียงรวจค subroutes ของ publiccontainer แทนการตรวจสอบที่ app.js เส้นทาง enter image description here

แต่ตอนที่ฉันเรียกมันใหม่มันเริ่มค้นหาเส้นทางที่ถูกต้องจาก app.js เส้นทางซึ่งตอบกลับคาดหวังเส้นทาง&หน้านั่นคือป้ายใน

enter image description here

1

คำตอบที่ดีที่สุด

0

ผมอ่านหนังสือเกือบคำถามที่คล้ายกันในแง่ของเพียงการแสดงผลที่ถูกต้องเส้นทางตอนตีปรับปรุง/เรียกใหม่

ที่นี่ มีปฏิกิริยา Router ทำงานเดียวที่รู้สึกปลอดโปร่งมากเลยหลังจากที่หน้า

ปัญหาคือฉันห่อคนย่อยเส้นทางใหม่ router ดังนั้นฉันพยายามลง Router jsx นั่นเป็นห่อคน เปลี่ยน> &อื่น subroutes ในทั้งสอง AuthContainer.js & PublicContainer.js

นี่คืออัพเดท AuthContainer.js

import React from "react";
import {
  BrowserRouter as Router,
  Switch,
  Route,
  withRouter
} from "react-router-dom";

// PAGES
import Signin from "../Auth/Signin";
import Signup from "../Auth/Signup";

const AuthContainer = () => {
  console.log("AUTH")
  return (
    <div>
        <Switch>
          <Route exact path="/auth/signin" component={Signin}/>
          <Route exact path="/auth/signup" component={Signup}/>
          <Route exact path="/auth" component={Signin}/>
        </Switch>
    </div>
  );
};

export default withRouter(AuthContainer);

และนี่ก็คือ PublicContainer.js

/* Dependencies */
import { Route, Switch } from 'react-router-dom'

/* Components */
import Header from "../../Components/Header"
import Products from "./Products"
import Home from "./Home"
import UserProfile from "../User/AccountProfile"

import MyCart from '../Public/MyCart'

/* Protected */

const PublicContainer = ({toAuth}) => {
    console.log("PUBLIC")
    return (
        <div>
                <Header />
                <Switch>
                    <Route exact path='/products' render={(props) => <Products />} />
                    <Route exact path='/profile' render={(props) => <UserProfile />} />
                    <Route exact path='/mycart' render={(props) => <MyCart />} />
                    <Route exact path='/' render={(props) => <Home />} />
                </Switch>
        </div>
    )
}

export default PublicContainer

enter image description here

2021-11-21 16:31:24

ที่เชื่อมโยงกันหนึ่งของฉันคำตอบ
Drew Reese

@DrewReese ขอบคุณมาก! พระเจ้าคุ้มครองคุณ
TheNewBeeeee

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่