2016-08-01 132 views
0

我使用的反應 - 路由器,有一個功能,編程到另一個網頁:react-router爲什麼代碼在轉換後繼續執行?

transitionTo(url) { 
    hashHistory.push(url) 
    } 

它工作正常,但我很困惑,因爲如果在轉換之後更多的代碼,那麼該代碼將繼續跑步。我希望執行完成後的過渡。

即下面的代碼將通過每個指定路由的轉換,上/ flib

transitionTo('/floob') 
transitionTo('/flub') 
transitionTo('/flib') 

這是爲什麼結束了?

我本來期望它轉變直/ floob並沒有得到到/效果也很糟糕或/ flib

+0

我會想象這是因爲變化檢測在一定程度上被消除,所以只有最後一個項目經過。 –

回答

1

沒有什麼,停止下一行代碼的執行的。

首先transitionTo()只是一個正常的函數調用。爲什麼它會阻止下一行執行,除非它引發異常?

如果您期待歷史轉換導致某種頁面重新加載。它不是。 HistoryAPI和普通舊hashchange(你的情況)都沒有。也不是預期的行爲。因爲你確實想保持你所處的上下文。

而且,即使你堅持location api的行爲改變瀏覽上下文,它不會阻止下一行的執行。

console.log('before'); 
window.location.assign('https://google.com') 
window.location.assign('https://stackoverflow.com') 
window.location.assign('https://example.com') 
console.log('after'); 
+0

「爲什麼它會阻止下一行執行,除非它引發異常?」我想我認爲目標頁面會開始執行。 –

+0

@DukeDougal我明白了。正如我所說沒有頁面重新加載。但即使是當前的調用堆棧也會被執行。甚至更多。有'beforeunload'事件可能會阻止頁面重新加載。 –

相關問題