【问题标题】:React Router won't redirectReact Router 不会重定向
【发布时间】:2021-11-06 17:04:53
【问题描述】:

当我单击链接并将道具传递给组件以显示结果时,我想渲染不同的组件的问题。当我这样做时,应用程序不会进行第一步,即在页面上重定向和安装不同的组件

function SearchFlights() {
const [FlightNumber, setSearchFlightNumber] = useState(0);
const [ArrivalTime, setSearchArrivalTime] = useState(0);
const [DepartureTime, setSearchDeparturetime] = useState(0);
const [DepartureDate, setSearchDepartureDate] = useState(0);
const [ArrivalDate, setSearchArrivalDate] = useState(0);
const [DepartureTerminal, setSearchDepartureTerminal] = useState(0);
const [ArrivalTerminal, setSearchArrivalTerminal] = useState(0);
const [sendRequest, setSendRequest] = useState(false);
const [searchResults, setSearcResults] = useState({})
const obj = {
FlightNumber: FlightNumber,
ArrivalTime: ArrivalTime,
DepartureTime: DepartureTime,
DepartureDate: DepartureDate,
ArrivalDate: ArrivalDate,
ArrivalTerminal: ArrivalTerminal,
DepartureTerminal: DepartureTerminal

}
function handleClick(event) {
    event.preventDefault()
    axios.post('http://localhost:3001/searchflight', obj).then(() => {
        console.log("yes")
        setSendRequest(true);

    }).catch(err => {
        console.log(err)
        console.log("i am here")
    })


}
useEffect(() => {
    axios.get('http://localhost:3001/getresults').then((response) => {
        setSearcResults(response.data)
        console.log(searchResults);
        console.log("i got triggered now")
    }).catch(err => {
        console.log(err)
        console.log("i am here")
    })

}, [sendRequest])



return (


    <div className="create">
        <h2>Search a Flight</h2>
        <form>
            <label>Enter Flight Number</label>
            <input
                type="text"
                required
                // value={flightNumber}
                name="flightnumber"
                onChange={(e) => setSearchFlightNumber(e.target.value)}
            />
            <label>Enter Arrival Time </label>
            <input
                placeholder="hateb2a date..."
                type="text"

                //  value={arrivalTime}
                name="arrivaltime"
                onChange={(e) => setSearchArrivalTime(e.target.value)}
            />
            <label>Enter Departure Time</label>
            <textarea
                placeholder="hateb2a date bardo"

                //  value={departure}
                name="departuretime"
                onChange={(e) => setSearchDeparturetime(e.target.value)}
            ></textarea>

            <label>Enter Departure Date</label>
            <textarea
                placeholder="hateb2a date bardo"

                //  value={departure}
                name="departuredate"
                onChange={(e) => setSearchDepartureDate(e.target.value)}
            ></textarea>



            <label>Enter Arrival Date</label>
            <textarea

                required
                //  value={economySeats}
                name="economyseats"
                onChange={(e) => setSearchArrivalDate(e.target.value)}
            ></textarea>
            <label>Enter Arrival Terminal</label>
            <textarea
                required
                //    value={businessSeats}
                name="businessseats"
                onChange={(e) => setSearchArrivalTerminal(e.target.value)}
            ></textarea>


            <label>Enter Departure Terminal</label>
            <textarea
                required
                //    value={businessSeats}
                name="businessseats"
                onChange={(e) =>
setSearchDepartureTerminal(e.target.value)}
            ></textarea>

这是更改 url 的 React Router 步骤

                <Link to="/getresults" onClick={handleClick}> Search Flight</Link>
                <Switch>

                    <Route path={"/getresults"} component={SearchResults} />
                </Switch>
            </Router>
        </form>
    </div>


);
}

export default SearchFlights;

这是路由文件

import React from "react";
import { Component } from 'react';
import Home from '../src/Components/Home'
import {
  BrowserRouter as Router,
  Switch,
  Route,
  Link
} from "react-router-dom";
import './App.css';
import Flights from './Components/Flights';
import CreateFlight from './Components/CreateFlights';
import SearchFlights from './Components/SearchFlights';
import SearchResults from './Components/SearchResults'



function App() {
  const [data, setData] = React.useState(null);


  return (
    <>
      <Router>
        <Link to="/"> Home</Link>
        <Link to="/viewFlights"> view Flights</Link>
        <Link to="/createflight"> create Flight</Link>
        <Link to="/searchflight"> Search Flight</Link>
        {/* <Navbar /> */}
        <Switch>
          <Route path="/createFlight" exact component={CreateFlight} />
          <Route path="/" exact component={Home} />
          <Route path="/viewflights" exact component={Flights} />
          <Route path="/searchflight" exact component={SearchFlights} />
          <Route path="/getresults" component={SearchResults} />

        </Switch>
      </Router>
    </>
  );


  function About() {
    return <h2>About</h2>;
  }

  function Users() {
    return <h2>Users</h2>;
  }
}
export default App;

【问题讨论】:

  • 这个 SearchFlights 组件在哪个路由上渲染?请也分享该代码。

标签: node.js reactjs mongodb frontend mern


【解决方案1】:

单击链接时显示的 URL 是什么?

你可能想放任何一个

&lt;Route path={"getresults"} component={SearchResults} /&gt;(如果您定义了/ 路由)

&lt;Route exact path={"/getresults"} component={SearchResults} /&gt;(例如 localhost:xxxx/getresults)

【讨论】:

  • 我想重定向到 localhost:xxxx/getresults 并且我有一个“/”页面,但是当我点击链接时它不会更改浏览器中的 url
  • 我认为您将路由逻辑设置在错误的位置。将所有 移动到另一个文件(不在
    内),只留下 (以便您可以单击它)。这个包含所有路由的文件是您要在 App.js 中使用的文件,因此它声明了 url 如何映射到每个组件。所以你可以有类似&lt;Router&gt; &lt;Switch&gt; &lt;Route exact path="/" component={SearchFlight} /&gt; &lt;Route exact path="/getresults" component={GetResults} /&gt; &lt;/Switch&gt; &lt;/Router&gt;
  • 此外,您将在页面和组件之间移动,因此您可能希望使用 useHistory 将 axios 的结果推送到 /getresults 页面。 一般用于简单的导航,用于页面的简单更改。如果要将数据发送到另一个页面,则需要使用useHistoryuseLocation 的组合(并使用提交
  • 我已将所有路由移至一个具有先前路由的文件,但问题仍然存在浏览器不会更改链接 url
  • 与其中提到的所有路由共享该文件代码。 @MidoAshraf
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2021-04-25
  • 2019-12-29
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2023-02-23
相关资源
最近更新 更多