この記事では主に、react-router/react-router-dom v4 の履歴にアクセスできない問題の解決策をサンプルコードを通じて詳しく紹介します。これは、すべての人の学習や仕事に一定の参考学習価値があります。必要な友達は、ぜひ一緒に勉強しに来てください。
はじめに
最近アップグレードされたreact-router-domを使用しているときに、this.props.historyを使用するサブコンポーネントが見つかりません。公式ドキュメントを見ましたが、見つかりませんでした。非同期実行が完了した後にページにジャンプするので、どうすればよいですか? 国内の知識は、あなたが私のものをコピーし、私があなたのものをコピーすることです。ごみ。 Google に行くしかありません、
ついに答えを見つけました: (コードを一目で見る)
解決策
最初にルーターを使用します
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> ); }; }
次にサブコンポーネントの履歴を使用します
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 ( <p> <button onClick={this.test}>按钮</button> </p> ); }; }
を見てみましょうthis.context :
上記は私があなたのためにまとめたものです。
関連記事:
node.js やその他のテクノロジーを使用してログインと登録機能を実装するにはどうすればよいですか?
フロントエンドアルゴリズムにおけるテキスト回避に関連する問題(詳細なチュートリアル)
以上がv4 履歴にアクセスできない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。