单击按钮 reactjs 路由到另一个页面

Route to another page on click button reactjs

我是 reactjs 的新手,现在从事路由和导航方面的工作。按下按钮时我试图导航到新页面,但它抛出错误。

我的App.js文件:

import React from 'react';
import './App.css';
import Editor from './editor';
import {BrowserRouter as Router, Route, Link} from "react-router-dom";
import {createBrowserHistory} from "history";

const history = createBrowserHistory();

class App extends React.Component { 

  constructor(props) {
    super(props);
    this.state ={
    };

    this.onProductClick = this.onProductClick.bind(this);
  }

  onProductClick(){
    console.log('clicked');
    this.history.push('/editor');
  }

  render() {
    return (
       <Router>
          <div>
             <Route path='/editor' component={Editor} history={history} />
          </div>
          <div>
             <button onClick={this.onProductClick} className="btn btn-primary" id="a_1">Try now!</button>
          </div>
       </Router>

    )
  }
}

export default App;

我的 editor.js 文件是这样的:

import React, { Component } from 'react';

class Editor extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
    }
  }
  render() {
    return (
      <div id="editor">
       <h3>Products Here</h3>
      </div>
    );
  }
}

export default Editor;

点击按钮后的错误信息是:

TypeError: Cannot read property 'push' of undefined

   15 | }
   16 | onProductClick(){
   17 |   console.log('clicked');
>  18 |   this.history.push('/editor');
   19 | ^
   20 | }
   21 | 
   22 | render() {

我不明白这里做错了什么。

历史对象在道具中可用。请改用 this.props.history.push。另外,您的代码有几处错误。尝试隔离路由和组件。该按钮必须在路由器组件之外。使用 React.Fragment 一次渲染两个以上的组件。研究更多关于 React 的知识。

看起来你在 onProductClick 中引用了 this.history.push('/editor');,因为你正在使用 this,JS 引擎试图在 [=] 的上下文中查找变量历史记录24=] 但由于在 class 的上下文中没有定义名为 history 的变量,因此它的计算结果为 undefined.push,导致错误 cannot read property push of undefined

您确实在 class 定义之外定义了历史变量。要访问它,您可以通过此更改将 this.history.push('/editor'); 更改为 history.push('/editor');,您将引用您在顶部定义的历史变量。

但很可能使用 React 路由器,您应该尝试从 props 访问历史对象,所以 this.props.history.push('/editor')