2017-11-21 9 views
1

TabNavigatorコンポーネントがあり、個々のタブ画面状態をタブ・プレスでリセットする必要があります。タブプレスでクラス(コンポーネント)メソッドを呼び出すにはどうすればよいですか?私はtabBarOnPressを見てきましたが、これは親レベル(TabNavigator)から関数を受け取ります。クラスメソッドをトリガする必要があり、そのメソッドをエクスポートしたくありません。タブ・ナビゲーター・タブからのトリガー・クラス関数呼び出しPress-Reactネイティブ/ナビゲーション

答えて

2

は、あなたが同様のコンポーネントレベルでnavigationOptionsを使用することができ、この

const HOME = TabNavigator({ 
    [SCREENS.EXPLORESCREEN]: { screen: ExploreScreen }, 
    [SCREENS.ASKSCREEN]: { screen: AskScreen }, 
    },{ 
     initialRouteName: SCREENS.EXPLORESCREEN 
    }) 
    const PrimaryNav = StackNavigator({ 
    [SCREENS.HOMESCREEN]: { 
    screen: HOME, 
    navigationOptions=({navigation})=>{ 
    return{ 
      tabBarOnPress :()=>{ 
      if (typeof navigation.state.params.cancelState!=="undefined"){ 
       navigation.state.params.cancelState() 
      } 
      else{ 
      //your stuff 
      } 
      } 
     } 
    } 
    }, 
}, 
    { 
    // Default config for all screens 
    headerMode: "screen", 
    initialRouteName: SCREENS.HOMESCREEN 
    , 

    } 

); 

ExploreScreen.js

class ExploreScreen extends Component { 

    componentDidMount(){ 
    this.props.navigation.setParams({ 
    cancelState:this.cancelState 
    }) 

    } 
    cancelState=()=>{ 
    //your Stuff 
    } 
} 
  • ようTabNavigatorコンテナがあるとします。
+1

ありがとう!注意すべき1つのケースは、タブがstackNavigatorである場合です。その場合、paramsに入る前にstate.routesにアクセスする必要があります。また、navigationOptionsの後に "="ではなく ":"を付ける必要がある小さなタイプミスです。その他のソリューション? – Bob

関連する問題