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

react-router v4如何使用history控制路由跳轉(zhuǎn)詳解

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

前言

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

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

問題

當(dāng)我們使用react-router v3的時候,我們想跳轉(zhuǎn)路徑,我們一般這樣處理

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

類似下面這樣

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等的導(dǎo)出~~

那怎么辦?我如何控制路由跳轉(zhuǎn)呢???

解決方法

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);

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

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

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");
 }
 ...
}

當(dāng)然,這種方法慎用~盡量不用。因?yàn)閞eact不推薦使用contex哦。在未來版本中有可能被拋棄哦。

3. hack

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

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

我們可以不使用推薦的BrowserRouter,依舊使用Router組件。我們自己創(chuàng)建history,其他地方調(diào)用自己創(chuàng)建的history??创a~

我們自己創(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

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

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

    React HOC高階組件深入講解

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

    深入理解React中何時使用箭頭函數(shù)

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

    React點(diǎn)擊事件的兩種寫法小結(jié)

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

    React中props使用教程

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

    react項(xiàng)目使用redux初始化方式

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

    react-native ListView下拉刷新上拉加載實(shí)現(xiàn)代碼

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

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

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

    詳解React中的不可變值

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

    在React中應(yīng)用SOLID原則的方法

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

最新評論

隆德县| 丰原市| 吉首市| 大邑县| 南郑县| 兴城市| 卢湾区| 云和县| 准格尔旗| 长岭县| 绍兴县| 泰州市| 莱西市| 乌拉特中旗| 通州区| 长顺县| 晋江市| 绥芬河市| 乌拉特后旗| 甘肃省| 淅川县| 思茅市| 龙南县| 澜沧| 眉山市| 东辽县| 会理县| 石城县| 梁河县| 凌源市| 宝鸡市| 绥芬河市| 綦江县| 科尔| 扬中市| 防城港市| 柘荣县| 安岳县| 尼勒克县| 定南县| 肇庆市|