2017-02-22 74 views
7

有一點讓人困惑的是路由名稱和密鑰之間的區別,以及爲什麼你會使用一個和另一個。並且,如何處理重複的路由名稱。在react-navigation中,routeName和key有什麼區別?

https://reactnavigation.org/docs/navigators/navigation-prop

這是說你用routeName導航到的畫面,那是key「用於路線排序的唯一標識。」那是什麼意思?

看起來好像路由名不必如我的示例中所示的那樣是唯一的,因爲外部標籤和內部堆棧都具有相同的路由名稱。當您使用導航功能時 - 您傳遞路線名稱,對嗎?如果是這樣,它如何區分嵌套導航器中的重複路由名稱和何時使用該鍵?

 export TabsNavigator = TabNavigator({ 
      Home: { 
      screen:StackNavigator({ 
       Home: { screen: HomeScreen }, 
      }), 
      }, 
      Profile: { 
      screen: StackNavigator({ 
       Profile: { ProfileScreen }, 
      }), 
      }, 
     }); 

的文檔具有設置鍵的例子,但我不明白的是什麼它試圖做什麼,或者爲什麼你會做一個真正的用例的上下文。 https://reactnavigation.org/docs/navigators/navigation-prop

import { NavigationActions } from 'react-navigation' 

const setParamsAction = NavigationActions.setParams({ 
    params: {}, // these are the new params that will be merged into the existing route params 
    // The key of the route that should get the new params 
    key: 'screen-123', 
}) 
this.props.navigation.dispatch(setParamsAction) 

回答

1

您使用的瀏覽器(例如StackNavigator)指定屏幕的名稱,打開/顯示屏幕。每個屏幕都有一個唯一的標識符,這是關鍵。例如。如果您打開兩個相同類型的屏幕,它們將具有相同的路由名稱,但具有不同的密鑰。

隨着this.props.navigation.dispatch(NavigationActions.setParams(params: {val: 'val'}, key: 'home-1'));你可以用鍵'home-1'更新屏幕的導航狀態。例如。如果在主屏幕頂部有StackNavigator和設置屏幕,則可以從設置屏幕更新主屏幕的導航狀態(this.props.navigation.state.params)。

+3

如果我不使用NavigationActions,我在哪裏指定一個鍵?它是否在StackNavigator路由定義中? – vijayst

+1

何處配置唯一密鑰?它是每個屏幕還是每個導航器?文檔在按鍵上相當糟糕... – CoredusK