使用Navigation.goBack()时如何将数据发送回先前的场景?

lau*_*ent 3 react-native react-navigation

我有屏幕1,可以使用以下命令从屏幕1导航到屏幕2:

navigation.navigate('Screen2')
Run Code Online (Sandbox Code Playgroud)

在此屏幕上,我想转到上一个屏幕,它很简单:

navigation.goBack()
Run Code Online (Sandbox Code Playgroud)

但是我想知道如何将一些数据传回Screen1?诸如此类的东西行不通,navigation.goBack({ myData: 'something' })所以我想知道一般建议使用哪种方法?

Rav*_*avi 8

您可以通过2种方法解决它:

1:使用导航方法

通过导航调用该屏幕时传递一种方法:

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

refresh=(data)=> {

}
Run Code Online (Sandbox Code Playgroud)

当您按回去时,像

this.props.navigation.state.params.onGoBack('123');
this.props.navigation.goBack();
Run Code Online (Sandbox Code Playgroud)

2:使用redux存储

如果您在应用程序中使用redux,则只要用户按下后退按钮就可以更新redux存储,并在上一屏幕中获取存储值。


小智 5

您可以像这样传递回调(onSelect):

// 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} />;
  }
}
Run Code Online (Sandbox Code Playgroud)