調試react native的項目有一個報錯:react
there is no route defined for key XXXX
它發生在我調試TabNavigator選項卡路由器的時候,我把以下代碼的Agreement路由轉移到了另外一個StackNavigator中。明明我在HomeStack中定義好了呀。npm
const TabsNavigator=createBottomTabNavigator({ Home:{ screen:HomeStack }, Second:{ screen:SecondPage }, Video:{ screen:VideoPage, }, Auction:{ screen:AuctionPage }, Center:{ screen:CenterPage }, /*Agreement:{ screen:AgreementPage }*/ },{}})
const HomeStack=createStackNavigator({ Home:{ screen:HomePage }, Agreement:{ screen:AgreementPage }, //Agreement轉移到這裏 }
其實緣由跟咱們的代碼關係不大,它是ide
react navigation官網上的警告是這麼說的:spa
警告:Route/Router 定義更改 當你的應用程序代碼更改成在導航狀態下支持給定路線的新路線或不一樣路線時,應用程序可能會在呈現舊導航狀態時中斷。 在從新配置路由器和導航層次結構時,這可能會在開發期間按期發生。 可是當你發佈一個新版本的應用程序時,它也可能在生產中發生! 保守的行爲是在應用程序更新後擦除導航狀態。 最簡單的方法是爲你發佈給用戶的每一個版本引用不一樣的持久性密鑰。 React Navigation 使用 React 的componentDidCatch功能試圖減輕由路由定義更改引發的崩潰,但這被認爲是實驗性的,可能沒法捕獲全部錯誤。
劃重點,從新配置導航的層次結構時會發生bug。因此咱們先擦除持久化的代碼,這個時候就不會報錯了。調試
return <Provider store={store}> <AppContainer/> </Provider>*/ /*return <Provider store={store}> <AppContainer persistenceKey={"navigationDEV"} renderLoadingExperimental={() => <ActivityIndicator/>}/> </Provider> */
若是咱們還想繼續使用持久化state帶給咱們的開發方便,那麼路由改好以後,把persistenceKey的註釋放開,從新 npm run start 啓動項目就能夠回到bug以前的開發中了。code