如何在 React Native Navigation v5 中将数据传回上一屏幕?
How to pass data back to previous screen in react native navigation v5?
我刚刚更新以响应本机导航版本 5。现在我正在尝试在调用 goBack() 时将数据发送回上一个屏幕。
我用
推送下一个视图
const onSelectCountry = item => {
console.log(item);
};
navigation.navigate('SelectionScreen', {
onSelect: onSelectCountry});
并在通过调用从 FlatList 中选择项目后返回:
function onSelectedItem(item) {
route.params.onSelect(item);
navigation.goBack();
}
但是通过使用参数发送函数我得到一个警告:在导航状态中发现不可序列化的值...
谁能告诉我正确的方法。
navigation send data to screens.
onPress={() => {
// Pass params back to home screen
navigation.navigate('Home', { post: postText });
遵循官方文档React Native
这是一个实现
屏幕 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
)
}
我访问了这个 post 因为我想在 2 个堆栈中使用相同的公共组件。如何知道如何返回并传递参数?
我通过首先传递一个参数到那里来解决它,它将标识从哪里访问组件。
然后,我没有使用不接受参数的 goBack(),而是导航到上一条路线并传递参数。
//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...') />
)
}
我刚刚更新以响应本机导航版本 5。现在我正在尝试在调用 goBack() 时将数据发送回上一个屏幕。
我用
推送下一个视图const onSelectCountry = item => {
console.log(item);
};
navigation.navigate('SelectionScreen', {
onSelect: onSelectCountry});
并在通过调用从 FlatList 中选择项目后返回:
function onSelectedItem(item) {
route.params.onSelect(item);
navigation.goBack();
}
但是通过使用参数发送函数我得到一个警告:在导航状态中发现不可序列化的值...
谁能告诉我正确的方法。
navigation send data to screens.
onPress={() => {
// Pass params back to home screen
navigation.navigate('Home', { post: postText });
遵循官方文档React Native
这是一个实现
屏幕 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
)
}
我访问了这个 post 因为我想在 2 个堆栈中使用相同的公共组件。如何知道如何返回并传递参数?
我通过首先传递一个参数到那里来解决它,它将标识从哪里访问组件。 然后,我没有使用不接受参数的 goBack(),而是导航到上一条路线并传递参数。
//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...') />
)
}