Can't find variable: navigate

前端 未结 3 1921
不知归路
不知归路 2021-01-18 00:07

I am trying to navigate between two screen with the help of react-navigation. I am able to access navigate inside the render method as

相关标签:
3条回答
  • 2021-01-18 00:53

    That happens because you are not destructuring it from the props as you have done in your render() function

    onPressButton = () => {
        var {navigate} = this.props.navigation;
        var options = {
          title: strings.app_name,
          content: strings.create_message,
          positiveText: strings.OK,
          onPositive: () => navigate("DashboardScreen")
        };
        var dialog = new DialogAndroid();
        dialog.set(options);
        dialog.show();
      }
    
    0 讨论(0)
  • 2021-01-18 01:08

    Object destructuring work like this,

    Destructuring objects:

    const obj = { first: 'Jane', last: 'Doe' };
    const {first: f, last: l} = obj;
        // f = 'Jane'; l = 'Doe'
    
    // {prop} is short for {prop: prop}
    const {first, last} = obj;
        // first = 'Jane'; last = 'Doe'
    

    In Your Case:

    1. const { navigation:navigate } = this.props;
    

    or:

    2. const {navigation} = this.props;
    
    
    
    
    
    export default class CreateMessageScreen extends Component {
      render() {  
     const { navigation:navigate } = this.props;
    
        return (
          <View style={styles.container}>
            <Image source={require("./img/create_message.png")} />
            <Text style={styles.textStyle}>{strings.create_message}</Text>
    
            <RoundButton
              textStyle={styles.roundTextStyle}
              buttonStyle={styles.roundButtonStyle}
              onPress={this.onPressButton}
            >
              CREATE MESSAGE
            </RoundButton>
    
          </View>
        );
      }
    
    
    
        onPressButton() {
      const { navigation:navigate } = this.props;
            var options = {
              title: strings.app_name,
              content: strings.create_message,
              positiveText: strings.OK,
              onPositive: () => navigate("DashboardScreen")
            };
            var dialog = new DialogAndroid();
            dialog.set(options);
            dialog.show();
          }
        }
    
    0 讨论(0)
  • 2021-01-18 01:10

    You need to move const { navigate } = this.props.navigation; into the onPressButton function instead of the render function (don't forget to bind the function so that this has the correct value):

    export default class CreateMessageScreen extends Component {
      constructor() {
        super();
    
        // need to bind `this` to access props in handler
        this.onPressButton = this.onPressButton.bind(this);
      }
    
      render() {  
        return (
          <View style={styles.container}>
            <Image source={require("./img/create_message.png")} />
            <Text style={styles.textStyle}>{strings.create_message}</Text>
    
            <RoundButton
              textStyle={styles.roundTextStyle}
              buttonStyle={styles.roundButtonStyle}
              onPress={this.onPressButton}
            >
              CREATE MESSAGE
            </RoundButton>
    
          </View>
        );
      }
    
      onPressButton() {
        const { navigate } = this.props.navigation;
    
        var options = {
          title: strings.app_name,
          content: strings.create_message,
          positiveText: strings.OK,
          onPositive: () => navigate("DashboardScreen")
        };
        var dialog = new DialogAndroid();
        dialog.set(options);
        dialog.show();
      }
    }
    
    0 讨论(0)
提交回复
热议问题