React-Router路由跳轉時render觸發兩次的狀況

問題:React-Router路由跳轉時,render觸發兩次,致使頁面重複渲染。react

緣由:項目中使用的react-router ^3.x.x。react-router路由跳轉時,this.props.location.action的值會有兩種狀態。這兩種狀態都會觸發render。故頁面渲染兩次。瀏覽器

   1. 當點擊Link時,this.props.location.action=PUSH;
   2. 當瀏覽器前進後退時,this.props.location.action=POP。react-router

   因此當點擊了Link時,狀態先是PUSH,以後瀏覽器發生前進後退,狀態變爲POP。函數

解決方案:在路由層,使用react周期函數 shouldComponentUpdate(生命週期不熟悉的同窗請另查資料) 進行 this.props.location.action值得判斷。根據項目實際須要判斷值是PUSH,或者是POP。this

     本人選擇的是POP,由於項目中有些需求要使用到 window.location.hash='xxxxxxxx',這種狀況PUSH是觸發不到的,因此路由跳轉會失敗。code

shouldComponentUpdate() {
    // POP 瀏覽器前進後退, PUSH 點擊Link
    return this.props.location.action === "POP"
 }

備註:facebook官方說此狀況是 react-router 的BUG,已經在 ^4.x.x中修復了。router

相關文章
相關標籤/搜索