鍍金池/ 問答/HTML5  HTML/ 初學(xué)react,router跳轉(zhuǎn)失敗的問題

初學(xué)react,router跳轉(zhuǎn)失敗的問題

代碼如下:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import registerServiceWorker from './registerServiceWorker';
import './App.css';
import Header from './header';
import Main from './main';
import Footer from './footer';
import Login from './login/index'
import {
  HashRouter as Router,
  Route,
  hashHistory,
  Switch
} from 'react-router';

import { Provider} from 'react-redux'
import store from './store'

const Home = () => (
  <div>
    <h3>Home</h3>
  </div>
)
const Chat=()=>(
  <div className="App">
  <Header></Header>
  <Main></Main>
  <Footer></Footer>
  </div>
)
const LoginPage=()=>(<Login />)
class App extends Component{
  render(){
    **this.props.history.push('/chat')**
    console.log(hashHistory)
    return (
      <Router history={hashHistory}>
      <div style={{height:'100%'}}>
      <Switch>
        <Route exact path="/" component={LoginPage}/>
        <Route path="/chat" component={Chat}/>
        <Route path="/home" component={Home}/>
        <Route path="/login" component={Login}/>
      </Switch>
      </div>
    </Router>)
  }
}

想通過render中執(zhí)行切換路由this.props.history.push('/chat')報(bào)錯(cuò):
TypeError: Cannot read property 'push' of undefined,不知道怎么辦了,求解答

回答
編輯回答
礙你眼

你直接:

hashHistory.push('/chat')

就行了

出這個(gè)錯(cuò)的原因是,<Router> 組件的后代里頭才有可能有 this.props.history,
而你的 App 是在 <Router> 外面的所以沒有 this.props.history,也就是 this.props.history 是 undefined,所以報(bào)錯(cuò):

無法在 undefined 上找到 push 屬性

希望對你有幫助

2018年4月7日 01:16
編輯回答
孤慣

可以使用重定向過去

     <Redirect from="/" to="/chat" />

這個(gè)頁面是路由初始入口,是不存在history方法的;
具體的你可以打印this.props看一下

2017年4月22日 00:24
編輯回答
深記你

我解決了順便寫了篇文章,方便遇到同樣問題的兄弟們傳送門

2017年1月6日 13:37