Javascript 如何在react native navigation v5中将数据传递回上一个屏幕?
我刚刚更新了react native navigation版本5。现在,我试图在goBack()调用中将数据发送回上一个屏幕 我用鼠标推下一个视图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
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...') />
)
}