解決 react-router / react-router-dom v4 history不能訪問的問題


  今天我把react-router 升級了一下, 在使用react-router-dom 是,子組件使用this.props.history  找不到了,看看官方文檔,找了半天也沒找到,
因為我是在異步執行完后才跳轉頁面,需要用到push 或者replace,怎么辦啊,國內知識都是你復制我的,我復制你的,都特么垃圾。只能去Google,
最終找到了答案:(看代碼一目了然)

首先使用router
import React, { Component } from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { Provider } from 'mobx-react';
import stores from '../store/index';
import Bundle from '../components/bundle';
import Hello from 'bundle-loader?lazy!../components/hello.jsx';

// 這是按需加載,對於現在討論的問題沒有影響
const HelloAPP = () => (
    <Bundle load={Hello}>
        {(Hello) => <Hello />}
    </Bundle>
);
export default class App extends Component {
  constructor(props) {
    super(props);
  }
  render() {
    return (
      <Provider { ...stores }>
        <BrowserRouter basename="/">
          <Route path="/" component={HelloAPP}/>
        </BrowserRouter>
      </Provider>
    );
  };
}

 接着是子組件的使用history

import React, { Component } from 'react';
// 需要這步,你要npm 這個,
import PropTypes from 'prop-types';
export default class Hello extends Component {
  constructor(props) {
    super(props);
  }
  // 這一步是重點
  static contextTypes = {
    router: PropTypes.object.isRequired
  };
  test = () => {
    console.log(this.context);
    setTimeout(() => {
      this.context.router.history.push("/otherPath");
    }, 1000);
  };
  render() {
    return (
      <div>
        <button onClick={this.test}>按鈕</button>
      </div>
    );
  };
}

 讓我們看看this.context :

希望我能幫助你


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM