Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send data back to previous sceen when using navigation.goBack()?

I've got screen 1 from which I navigate to screen 2 using:

navigation.navigate('Screen2')

From this screen, I would like to go to the previous one, which simple:

navigation.goBack()

However I'm wondering how can I pass some data back to Screen1? Something like wouldn't work navigation.goBack({ myData: 'something' }) so I'm wondering what is the recommended way to do this in general?

like image 796
laurent Avatar asked Sep 28 '18 09:09

laurent


People also ask

How do you pass data in navigation goBack?

Unfortunately, you can not pass data like this when using the goBack() method. One workaround is to pass a callback function to the screen you are navigating to. Then, you can call that function with whatever data you wanted to pass back before calling the goBack() method.


2 Answers

You can pass a callback (onSelect) like this:

// SCREEN 1
import React from "react";
import { Button, Text, View } from "react-native";

class Screen1 extends React.Component {
  state = { selected: false };

  onSelect = data => {
    this.setState(data);
  };

  onPress = () => {
    this.props.navigate("Screen2", { onSelect: this.onSelect });
  };

  render() {
    return (
      <View>
        <Text>{this.state.selected ? "Selected" : "Not Selected"}</Text>
        <Button title="Next" onPress={this.onPress} />
      </View>
    );
  }
}

// SCREEN 2
import React from "react";
import { Button } from "react-native";

class Screen2 extends React.Component {
  goBack() {
    const { navigation } = this.props;
    navigation.goBack();
    navigation.state.params.onSelect({ selected: true });
  }

  render() {
    return <Button title="back" onPress={this.goBack} />;
  }
}
like image 183
Pedro Martins Avatar answered Oct 03 '22 11:10

Pedro Martins


You can solve it with 2 ways :

1 : Using navigation method

Pass a method when you are calling that screen through navigation :

this.props.navigation.navigate('Screen2', {
  onGoBack: this.refresh,
});

refresh=(data)=> {

}

and when you press back, pass data like

this.props.navigation.state.params.onGoBack('123');
this.props.navigation.goBack();

2 : Using redux store

If you are using redux in your application, just update redux store whenever user presses back button, and get store value in previous screen.

like image 26
Ravi Avatar answered Oct 03 '22 13:10

Ravi