未捕获的类型错误:无法读取未定义的属性(读取"历史记录")



我使用react router dom版本6.3.0。我得到未捕获的类型错误:无法读取未定义的属性(读取"历史记录"(错误。。在那之后,我尝试了很多方法也得到了同样的错误,请帮帮我。。。。这是Search.js文件,我在搜索特定项目时出错,而且url没有改变,它保持原样。

import React, { useState, Fragment } from "react";
import MetaData from "../layout/MetaData";
import "./Search.css";
const Search = ({ history }) => {
  const [keyword, setKeyword] = useState("");
  const searchSubmitHandler = (e) => {
    e.preventDefault();
    if (keyword.trim()) {
      
  
   
 history.push(`/products/${keyword}`);
    } else {
      history.push("/products");
    }
  };
  return (
    <Fragment>
      <form className="searchBox" onSubmit={searchSubmitHandler}>
        <input
          type="text"
          placeholder="Search a Product ..."
          onChange={(e) => setKeyword(e.target.value)}
        />
        <input type="submit" value="Search" />
      </form>
    </Fragment>
  );
};
export default Search;

app.js文件

import "./App.css";
import { useEffect} from "react";
import { BrowserRouter as Router,Route,Routes} from "react-router-dom";
import Header  from "./component/layout/Header/Header";
import WebFont from "webfontloader";
import React from "react";
import Footer from "./component/layout/Footer/Footer.js"
import Home from "./component/Home/Home.js"
import ProductDetails from "./component/Product/ProductDetails.js"
import Products from './component/Product/Products.js'
import Search from './component/Product/Search.js'
function App() {
  useEffect(() => {
    WebFont.load({
      google: {
        families: ["Roboto", "Droid Sans", "Chilanka"],
      },
    });

  }, []);
  window.addEventListener("contextmenu", (e) => e.preventDefault());
  return (
    <Router>
      <Header/>
        <Routes>
          <Route path='/' element={<Home/>} />
          <Route path='/product/:id' element={<ProductDetails/>} />
          <Route path='/products' element={<Products/>} />
          <Route path='/search' element={<Search/>} />
        </Routes>
      <Footer/>
    </Router>
  );
}
export default App;

谢谢。

我建议使用react路由器dom v6的useNavigate挂钩。

const navigate = useNavigate();
...
navigate(`/products/${keyword}`);
    } else {
      navigate("/products");
    }
};
...

最新更新