最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react-router v4如何使用history控制路由跳轉詳解

 更新時間:2018年01月09日 08:48:40   作者:Just_do  
這篇文章主要給大家介紹了關于react-router v4如何使用history控制路由跳轉的相關資料,文中通過示例代碼介紹的的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

距離React Router v4 正式發(fā)布也已經挺久了,這周把一個React的架子做了升級,之前的路由用的還是v2.7.0版的,所以決定把路由也升級下,正好“嘗嘗鮮”...

江湖傳言,目前官方同時維護 2.x 和 4.x 兩個版本。(ヾ(。ꏿ﹏ꏿ)ノ゙咦,此刻相信機智如我的你也會發(fā)現,ReactRouter v3 去哪兒了?整丟了??巴拉出鍋了???敢不敢給我個完美的解釋???)事實上 3.x 版本相比于 2.x 并沒有引入任何新的特性,只是將 2.x 版本中部分廢棄 API 的 warning 移除掉而已。按照規(guī)劃,沒有歷史包袱的新項目想要使用穩(wěn)定版的 ReactRouter 時,應該使用 ReactRouter 3.x。目前 3.x 版本也還處于 beta 階段,不過會先于 4.x 版本正式發(fā)布。如果你已經在使用 2.x 的版本,那么升級 3.x 將不會有任何額外的代碼變動。

問題

當我們使用react-router v3的時候,我們想跳轉路徑,我們一般這樣處理

  • 我們從react-router導出browserHistory。
  • 我們使用browserHistory.push()等等方法操作路由跳轉。

類似下面這樣

import browserHistory from 'react-router';
export function addProduct(props) {
 return dispatch =>
 axios.post(`xxx`, props, config)
 .then(response => {
 browserHistory.push('/cart'); //這里
 });
}

but!! 問題來了,在react-router v4中,不提供browserHistory等的導出~~

那怎么辦?我如何控制路由跳轉呢???

解決方法

1. 使用 withRouter

withRouter高階組件,提供了history讓你使用~

import React from "react";
import {withRouter} from "react-router-dom";

class MyComponent extends React.Component {
 ...
 myFunction() {
 this.props.history.push("/some/Path");
 }
 ...
}
export default withRouter(MyComponent);

這是官方推薦做法哦。但是這種方法用起來有點難受,比如我們想在redux里面使用路由的時候,我們只能在組件把history傳遞過去。。

就像問題章節(jié)的代碼那種場景使用,我們就必須從組件中傳一個history參數過去。。。

2. 使用 Context

react-router v4 在 Router 組件中通過Contex暴露了一個router對象~

在子組件中使用Context,我們可以獲得router對象,如下面例子~

import React from "react";
import PropTypes from "prop-types";
class MyComponent extends React.Component {
 static contextTypes = {
 router: PropTypes.object
 }
 constructor(props, context) {
 super(props, context);
 }
 ...
 myFunction() {
 this.context.router.history.push("/some/Path");
 }
 ...
}

當然,這種方法慎用~盡量不用。因為react不推薦使用contex哦。在未來版本中有可能被拋棄哦。

3. hack

其實分析問題所在,就是v3中把我們傳遞給Router組件的history又暴露出來,讓我們調用了~~

而react-router v4 的組件BrowserRouter自己創(chuàng)建了history,并且不暴露出來,不讓我們引用了。尷尬~

我們可以不使用推薦的BrowserRouter,依舊使用Router組件。我們自己創(chuàng)建history,其他地方調用自己創(chuàng)建的history。看代碼~

我們自己創(chuàng)建一個history

// src/history.js
import createHistory from 'history/createBrowserHistory';
export default createHistory();

我們使用Router組件

// src/index.js
import { Router, Link, Route } from 'react-router-dom';
import history from './history';
ReactDOM.render(
 <Provider store={store}>
 <Router history={history}>
  ...
 </Router>
 </Provider>,
 document.getElementById('root'),
);

其他地方我們就可以這樣用了

import history from './history';
export function addProduct(props) {
 return dispatch =>
 axios.post(`xxx`, props, config)
  .then(response => {
  history.push('/cart'); //這里
  });
}

4. 我非要用BrowserRouter

確實,react-router v4推薦使用BrowserRouter組件,而在第三個解決方案中,我們拋棄了這個組件,又回退使用了Router組件。

怎么辦。 你去看看BrowserRouter的源碼,我覺得你就豁然開朗了。

源碼非常簡單,沒什么東西。我們完全自己寫一個BrowserRouter組件,然后替換第三種解決方法中的Router組件。嘿嘿。

講到這里也結束了,我自己目前在使用第三種方法,雖然官方推薦第一種,我覺得用著比較麻煩唉。~

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • React?component.forceUpdate()強制重新渲染方式

    React?component.forceUpdate()強制重新渲染方式

    這篇文章主要介紹了React?component.forceUpdate()強制重新渲染方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React HOC高階組件深入講解

    React HOC高階組件深入講解

    高階組件就是接受一個組件作為參數并返回一個新組件(功能增強的組件)的函數。這里需要注意高階組件是一個函數,并不是組件,這一點一定要注意,本文給大家分享React 高階組件HOC使用小結,一起看看吧
    2022-10-10
  • 深入理解React中何時使用箭頭函數

    深入理解React中何時使用箭頭函數

    對于剛學前端的大家來說,對于React中的事件監(jiān)聽寫法有所疑問很正常,特別是React中箭頭函數使用這塊,下面這篇文章主要給大家深入的講解了關于React中何時使用箭頭函數的相關資料,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-08-08
  • React點擊事件的兩種寫法小結

    React點擊事件的兩種寫法小結

    這篇文章主要介紹了React點擊事件的兩種寫法小結,具有很好的參考價值,希望對大家有所幫助。
    2022-12-12
  • React中props使用教程

    React中props使用教程

    props是組件(包括函數組件和class組件)間的內置屬性,用其可以傳遞數據給子節(jié)點,props用來傳遞參數。組件實例化過程中,你可以向其中傳遞一個參數,這個參數會在實例化過程中被引用
    2022-09-09
  • react項目使用redux初始化方式

    react項目使用redux初始化方式

    這篇文章主要介紹了react項目使用redux初始化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • react-native ListView下拉刷新上拉加載實現代碼

    react-native ListView下拉刷新上拉加載實現代碼

    本篇文章主要介紹了react-native ListView下拉刷新上拉加載實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • ReactNative之鍵盤Keyboard的彈出與消失示例

    ReactNative之鍵盤Keyboard的彈出與消失示例

    本篇文章主要介紹了ReactNative之鍵盤Keyboard的彈出與消失示例,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • 詳解React中的不可變值

    詳解React中的不可變值

    這篇文章主要介紹了React中的不可變值的相關資料,幫助大家更好的理解和學習使用react.js,感興趣的朋友可以了解下
    2021-04-04
  • 在React中應用SOLID原則的方法

    在React中應用SOLID原則的方法

    SOLID?是一套原則,它們主要是關心代碼質量和可維護性的軟件專業(yè)人員的指導方針,本文給大家分享如何在React中應用SOLID原則,感興趣的朋友一起看看吧
    2022-07-07

最新評論

常宁市| 游戏| 蒙城县| 木兰县| 读书| 长武县| 龙泉市| 高雄市| 来宾市| 措美县| 岳普湖县| 衡山县| 繁昌县| 盘山县| 桓仁| 灌南县| 信宜市| 徐汇区| 温宿县| 邮箱| 竹山县| 含山县| 八宿县| 荔波县| 治县。| 蒙城县| 小金县| 池州市| 定安县| 锡林浩特市| 仙居县| 永州市| 滦平县| 宜兴市| 小金县| 东乡族自治县| 任丘市| 沁水县| 沙洋县| 无极县| 阳信县|