当前位置: 首页 > 面试题库 >

Uncaught TypeError:无法读取未定义的属性“ push”(React-Router-Dom)

公孙俭
2023-03-14
问题内容

我有一个带有旋转幻灯片的 仪表板 ,每个幻灯片在 Bldgs中
都有一个对应的选项卡。两者Dashboard.jsBldgs.js有孩子我App.js

当用户单击特定的幻灯片ADashboard.jsDashboard需要告诉App.js以便App告诉它在路由到时显示Bldgs.js选项卡。A``Bldgs

相信 ,我从传递正确的索引值Dashboard达到App和向下Bldgs。但是,我的App.js文件中抛出一个错误,指出:

Uncaught TypeError: Cannot read property 'push' of undefined

在我开始将handleClick()函数传递给Dashboard组件之前,我的代码运行良好。

Index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import injectTapEventPlugin from 'react-tap-event-plugin';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import { BrowserRouter as Router } from 'react-router-dom';
import { hashHistory } from 'react-router';

// Needed for onTouchTap
// http://stackoverflow.com/a/34015469/988941
injectTapEventPlugin();

ReactDOM.render(
  <MuiThemeProvider>
    <Router history={hashHistory}>
      <App />
    </Router>
  </MuiThemeProvider>,
  document.getElementById('root')
);

App.js

import React from 'react';
import { Route } from 'react-router-dom';
import Dashboard from './Dashboard';
import Bldgs from './Bldgs';

var selectedTab;

class App extends React.Component {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
    selectedTab = 0;
  }

  handleClick(value) {
    selectedTab = value;
    // console.log(selectedTab);
    this.props.history.push('/Bldgs');
    // console.log(this.props);
  }

  render() {
    var _this = this;

    return (
      <div>
        <Route exact path="/" render={(props) => <Dashboard {...props} handleClick={_this.handleClick} />} />
        <Route path="/Bldgs" component={Bldgs} curTab={selectedTab} />
      </div>
    );
  }
}

export default App;

Dashboard.js

import React, { Component } from 'react';
import './Dashboard.css';
import { AutoRotatingCarousel, Slide } from 'material-auto-rotating-carousel';
...

var curIndex;

class Dashboard extends Component {
  constructor(props) {
    super(props);
    this.handleEnter = this.handleEnter.bind(this);
    this.handleChange = this.handleChange.bind(this);
    curIndex = 0;
  }

  handleEnter(e) {
    // console.log(curIndex);
    this.props.handleClick(curIndex);
  }

  handleChange(value) {
    // console.log(value);
    curIndex = value;
  }

...
}

export default Dashboard;

Bldgs.js

...
var curTab;

class Bldgs extends Component {
  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
    this.goHome = this.goHome.bind(this);
    curTab = 0;
  }

  handleChange(value) {
    this.setState({'selectedTab': value});
    console.log(this.state);
  }

  goHome(e) {
    this.props.history.push('/');
  }

...
}

export default Bldgs;

问题答案:

为了historyApp组件中使用,请与配合使用withRouterwithRouter仅当您的组件未收到时,才需要使用Router props

如果您的组件是 由路由器渲染的 组件的 嵌套子代, 或者 您尚未将路由器道具传递给它, 或者 该组件根本未链接到路由器
,并且作为独立于 该组件 的组件呈现,则 可能会发生这种情况路线。

import React from 'react';
import { Route , withRouter} from 'react-router-dom';
import Dashboard from './Dashboard';
import Bldgs from './Bldgs';

var selectedTab;

class App extends React.Component {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
    selectedTab = 0;
  }

  handleClick(value) {
    selectedTab = value;
    // console.log(selectedTab);
    this.props.history.push('/Bldgs');
    // console.log(this.props);
  }

  render() {
    var _this = this;

    return (
      <div>
        <Route exact path="/" render={(props) => <Dashboard {...props} handleClick={_this.handleClick} />} />
        <Route path="/Bldgs" component={Bldgs} curTab={selectedTab} />
      </div>
    );
  }
}

export default withRouter(App);

文档
上withRouter



 类似资料:
  • 问题内容: 我是新来的反应和反应路由器。 react的问题在于,在我的应用程序的某些页面上,react-router正在运行,并且出现一些类似的错误:“无法读取未定义的属性’push’”。 我正在使用反应0.14.1 我的路由代码如下所示: 我的组件现在是这样的: 谁能帮我这个?谢谢。 问题答案: 您的应用程序中没有提供支持的Router实例。 我假设您要导入withRouter以获取Router

  • 我相信我将正确的索引值从传递到,再传递到。但是,在我的文件中抛出一个错误,该错误声明: 在开始将函数传递给组件之前,我的代码运行良好。 dashboard.js Bldgs.JS

  • 这是我的猫鼬模式: 这是使用Express的Node.js服务器。它具有路由,如果触发该路由,它将使用请求中传递的信息更新用户的购物车。正文: 我打印到终端userCart,正如您在代码中看到的,它返回给我的是: 当服务器执行时,它返回以下错误: 如果我已经在Mongoose中定义了的结构,为什么不定义它?

  • 问题内容: 我是React的新手,正在使用React,Redux和React Router构建我的第一个应用程序,到目前为止,我已经成功设置了样板,但是当我想使用React-Router并创建路由时,出现以下错误 这仅在我尝试导入和使用时发生 这是我的index.js 还有我的package.json 任何知识都将受到欢迎,谢谢! 问题答案: 尝试将PropTypes包添加到您的应用中。 看来您只

  • 在运行我的第一个MEAN stack应用程序时,我遇到了以下错误: \contactlist\node_modules\express\lib\router\index.js:502 this.stack.push(层);^ TypeError:无法在function.proto读取未定义的属性“push”(C:\users\mahima kaushik\desktop\contactlist\n

  • 这是我的第一个项目,也是我的第一个岗位。我正在创建一个在朋友之间使用的博彩网站,但我遇到了这个错误:无法读取未定义的属性“Push” 我想让它再次发挥作用是件小事吧? 有什么建议吗? 数据库模式