React-Router:为什么react中的 useHistory 未定义?

IT技术 reactjs react-hooks react-router-dom
2021-05-22 15:34:05

我有这个。它与文档中所说的完全相同。我认为 react-router-dom module很好,因为在其他组件中,BrowserRouter、Router 和 Link 对我有用

import { useHistory } from "react-router-dom"
import React from 'react'

export default function HomeButton() {
  let history = useHistory()

  function handleClick() {
    history.push("/home")
  }

  return (
    <button type="button" onClick={handleClick}>
      Go home
    </button>
  );
}

当我单击按钮时会发生这种情况

类型错误:无法读取未定义的属性“推送”

我是 reactjs 的新手,请帮忙,谢谢

1个回答

您正在<Router>...</Router>使用 useHistory 的同一组件将路由器添加到 DOM

useHistory 仅适用于子组件,但不适用于父组件或组件本身。

您必须将<Router>...</Router>组件包装向上移动一级。你可以在 app.js 中做到这一点:

应用程序.js



import { BrowserRouter as Router } from 'react-router-dom'; 

function App() {
  return (
    <Router>
      <div className="App">
      </div>
    </Router>
  );
}

export default App;

组件.js


import React from'react';
import {useHistory, withRouter } from "react-router-dom";


export default function HomeButton() {
  let history = useHistory()

  function handleClick() {
    history.push("/home")
  }

  return (
    <button type="button" onClick={handleClick}>
      Go home
    </button>
  );
}

export default withRouter(HomeButton);

这对我有用。