2017-10-02 4 views
0

gemacht, während ich eine flache Navigation wie dieseNicht verschachtelten Bildschirm reagieren-Navigation

const MainNavigator = TabNavigator({ 
    Map: { 
    screen: MapScreen 
    }, 
    RoadObject: { 
    screen: RoadObjectScreen 
    } 
}); 

Klasse RoadObjectScreen habe jedes Mal gemacht wird, wenn es navigiert wird.

class RoadObjectScreen extends Component { 

static navigationOptions = ({ navigation }) => ({ 
    title: navigation.state.params && navigation.state.params.roadObject, 
    tabBarVisible: false 
}); 

render() { 
    console.log('Navigation:', this.props.navigation); 
    const { navigation } = this.props; 
    return (
     <View> 
      <Text style={{ paddingTop: 100 }} onPress={() => navigation.goBack()}> 
       Welcome to {navigation.state.params && navigation.state.params.roadObject } 
      </Text> 
     </View> 
    ); 
} 

}

aber wenn ich Bildschirm verschachtelt bekommen, stoppt sie gerendert werden, nur eine zu Beginn der Anwendung. So console.log ('Navigation:', this.props.navigation); Popups nur einmal.

const MainNavigator = TabNavigator({ 

    Map: { 
    screen: MapScreen, 
    navigationOptions: { 
     tabBarVisible: false 
    } 
    }, 
    RoadObjectMain: { 
    screen: StackNavigator({ 
     RoadObject: { 
     screen: RoadObjectScreen 
     } 
    }) 
    } 
}); 

Warum passiert das? Wie bekomme ich es gerendert und bekomme this.props.navigation zugänglich. Vielen Dank!

Antwort

1

In TabNavigator rendern Registerkarten einmal, wenn der Navigator aktiviert ist. Wenn Sie zwischen Registerkarten wechseln, werden die Bildschirme nicht ein zweites Mal gerendert.

Obwohl sie nicht zum zweiten Mal gerendert werden, können Sie immer noch auf this.props.navigation in Ihrer Klasse zugreifen.

Wenn Sie möchten, dass Ihre Registerkarten nur gerendert werden, wenn Sie zu dieser Registerkarte wechseln, können Sie lazy prop. Verwenden. Dadurch werden Ihre Tabs gerendert, wenn sie gewechselt werden, aber sie werden nur einmal gerendert, es sei denn, es gibt Statusänderungen oder Requisiten für diesen Bildschirm.

+0

Vielen Dank für Ihre Antwort, Bennygenel! Aber wie kann ich Änderungen in dieser.props.navigation im RoadObject (StackNavigator, nicht wie erwähnt TabNavigator) abfangen. Welche Funktion wird ausgeführt, wenn dieser Bildschirm aktiviert ist? – podeig

+0

Wenn in diesem Bildschirm keine Änderung erfolgt, wird keine Funktion ausgelöst. Wenn Sie einen Zustand oder einen Requisitenwert ändern, wird 'componentWillReceiveProps' ausgelöst. Für weitere Informationen sehen Sie [Lebenszyklus der Komponenten] (https://reactjs.org/docs/react-component.html#the-component-lifecycle) – bennygenel