Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react native navigation v5中将数据传递回上一个屏幕?_Javascript_Typescript_React Native_React Navigation_React Native Navigation - Fatal编程技术网

Javascript 如何在react native navigation v5中将数据传递回上一个屏幕?

Javascript 如何在react native navigation v5中将数据传递回上一个屏幕?,javascript,typescript,react-native,react-navigation,react-native-navigation,Javascript,Typescript,React Native,React Navigation,React Native Navigation,我刚刚更新了react native navigation版本5。现在,我试图在goBack()调用中将数据发送回上一个屏幕 我用鼠标推下一个视图 const onSelectCountry = item => { console.log(item); }; navigation.navigate('SelectionScreen', { onSelect: onSelectCountry}); 并在通过调用从平面列表中选择项目后进行向后移动: function

我刚刚更新了react native navigation版本5。现在,我试图在goBack()调用中将数据发送回上一个屏幕

我用鼠标推下一个视图

const onSelectCountry = item => {
    console.log(item);
};

navigation.navigate('SelectionScreen', {
        onSelect: onSelectCountry});
并在通过调用从平面列表中选择项目后进行向后移动:

function onSelectedItem(item) {
    route.params.onSelect(item);
    navigation.goBack();
}
但通过发送带有参数的函数,我得到了一个警告:在导航状态下发现了不可序列化的值

有人能告诉我正确的方法吗

导航将数据发送到屏幕


遵循官方文件,这里是一个实现

绿色A

const Screen1 = ({navigation, route}) => {
  const [item, setItem] = useState(null);

  useEffect(() => {
    navigation.addListener('focus', () => {
      console.log(route.params)
    })
  }, [])  

  const onPress = () => {
    navigation.navigate('Screen2', {onReturn: (item) => {
      setItem(item)
    }})
  }
  return (
    // Components
  )
}
屏幕2:

const Screen2 = ({navigation, route}) => {

  useEffect(() => {
    navigation.addListener('focus', () => {
      console.log(route.params)
    })
  }, [])  

  // back Press
  const onPress = () => {
    route.params.onReturn(item);
    navigation.goBack()
  }

  return (
    // Components
  )
}

我访问这篇文章是因为我想在两个堆栈中使用相同的公共组件。如何知道如何返回并传递参数

我通过首先传递一个参数来解决这个问题,该参数将标识从何处访问组件。 然后,我导航到上一条路线并传递参数,而不是使用不接受参数的goBack()

//in Stack1
navigation.navigate('commonComponent', isStack1: true)
//在CommonComponent中,使用navivation.navigate代替goback()
函数CommonComponent({导航,路由}){
const{isStack1}=route.params
const customRoute=isStack1?'routeNameInStack1':'routeNameInStack2'
返回(
navigation.navigate('customRoute',{myParams:'blablabla…')/>
)
}

这是哪个版本的,因为route.params.onReturn(item);导致我的描述“不是一个函数”出现错误,而且我在文档中找不到任何关于它的信息?react navigation v5onReturn是发送到screen2的参数,它不是文档中的函数使用navigation.navigate('SelectionScreen',{onSelect:(item)=>setItem(item)});试图找到一种使用goBack()函数的方法,但这似乎是使用全局状态(类似于Redux)的唯一方法,我不想对此类数据这样做。无论如何,谢谢。
//in Stack1
navigation.navigate('commonComponent', isStack1: true)
//in Stack2
navigation.navigate('commonComponent', isStack1: false)
//in CommonComponent, instead of goback(), use navivation.navigate

function CommonComponent({ navigation, route }) {
  const {isStack1} = route.params
  const customRoute = isStack1 ? 'routeNameInStack1' : 'routeNameInStack2'
  return (
    <Button title="Go back" onPress={() => navigation.navigate('customRoute', {myParams: 'blabla...') />
  )
}