开发者问题收集

useNavigate 给我空白网页

2022-06-14
688

App.js

import CreatePopBox from "./popbox";
import createGuestPage from "./guestPage";
import {BrowserRouter , Route} from "react-router-dom";
import {Routes} from "react-router"


function App() {
  return (
      <>
          <BrowserRouter>
              <Routes>
                  <Route path='/' >
                      <CreatePopBox/>
                  </Route>
                  <Route path='/guestPage'>
                      <createGuestPage/>
                  </Route>
              </Routes>

          </BrowserRouter>


      </>
  )
}

export default App;

guestPage.js

import React from "react";

export default function createGuestPage(){
    return(
        <div>
            <h1>GuestPage</h1>
        </div>
    );
}

popBox.js

import "./popbox.css";
import React, {useState} from "react";
import Modal from "./Modal";
import {Button} from "@mui/material";

export default function CreatePopBox(){

    const [isOpen, setIsOpen] = useState(false);


    return(
       <div className= "popBox">
           <Button variant="contained" color="success" size ="large" onClick=
               {()=>{setIsOpen(true)}}>
             Continued as Guest
           </Button>
           {isOpen && <Modal onClose={setIsOpen}/>}
       </div>

    );



}

modal.js

import React from 'react';
import "./Modal.css";
import {Button} from "@mui/material";
import {useNavigate} from "react-router";




export default function Modal({onClose}){
    const navigate = useNavigate();
    const handleFormSubmit = (event)=>{
        event.preventDefault();

        navigate("/guestPage");

    };
    return (
        <form className="Guest" onSubmit={handleFormSubmit}>
            <h1>Go to NextPage</h1>
            
                <Button variant="contained"  size ="large" id="cancel"
                        onClick={()=>onClose(false)}>Cancel
                </Button>

                <Button variant="contained"  size ="large" type="submit"
                >Continue
                </Button>
            
        </form>
    )
}

我创建了一个表单,其中有一个按钮“continue”,可以在模态框内重定向到 guestPage.js。但是当我使用钩子 useNaviage、BrowserRouter、Route 和 Routes 时,我得到了一个空白网页。我确信我的其他代码中没有错误,但我认为我没有错误地使用 useNaviage、BrowserRouter、Route 和 Routes。我这里漏掉了什么吗?

2个回答

路由内容应呈现在 Route 组件的 element 属性上。在嵌套路由的情况下, Route 组件的唯一有效子项是其他 Route 组件。

将路由内容移动到 element 属性。

示例:

<BrowserRouter>
  <Routes>
    <Route path='/' element={<CreatePopBox />} />
    <Route path='/guestPage' element={<CreateGuestPage />} />
  </Routes>
</BrowserRouter>
Drew Reese
2022-06-14

除了其他答案之外,请确保从 react-router-dom 导入 useNavigate 钩子和其他 react-router 组件。

请注意,您正在从 App 组件中的 react-router 导入 Routes ,同样的事情也会发生在使用 useNavigatemodal.js 组件上。

ivanatias
2022-06-14