Navigation.navigate 不重置路由参数 - React 本机导航
Navigation.navigate does not reset route params - React native navigation
我有一个对象列表。我正在将所选项目传递到该屏幕中的另一个屏幕。我正在推送对象的详细信息,现在返回到上一个屏幕,然后再次导航到同一屏幕。那个时候我仍然在获取我之前在列表中选择的先前选择的项目数据。如何重置导航参数数据?
屏幕 1:
<TouchableOpacity
onLongPress={() => {
setSelectedItem(item.TypeofPlant)
createTwoButtonAlert()
}}
onPress={() => navigation.navigate('Screen2', { item: item.Nameplan })}
>
屏幕 2:
const { item } = route.params
const isMounted = useRef(true)
useEffect(() => {
if (isMounted.current) {
fetchData();
}
return () => {
isMounted.current = false;
}
}, [])
const fetchData = () => {
console.log(item);
DataService.getPlantByType(item)
.then((responseJson) => responseJson)
.then((response) => {
setItems(response.data);
})
.catch(function (error) {
console.log(error)
})
}
我使用带有 reset-action 的 dispatch CommonAction 来清除 back-stack 我的应用程序,这样当用户按下硬件 reset-button :
时,应用程序会返回到上一个屏幕
<Button
title="Reset navigation state"
onPress={() =>
navigation.dispatch(
CommonActions.reset({
index: 1,
routes: [
{
name: 'Screen 2',
params: {key: route.params.key },
},
{ name: 'Screen 1' },
],
})
)
}
/>
我有一个对象列表。我正在将所选项目传递到该屏幕中的另一个屏幕。我正在推送对象的详细信息,现在返回到上一个屏幕,然后再次导航到同一屏幕。那个时候我仍然在获取我之前在列表中选择的先前选择的项目数据。如何重置导航参数数据?
屏幕 1:
<TouchableOpacity
onLongPress={() => {
setSelectedItem(item.TypeofPlant)
createTwoButtonAlert()
}}
onPress={() => navigation.navigate('Screen2', { item: item.Nameplan })}
>
屏幕 2:
const { item } = route.params
const isMounted = useRef(true)
useEffect(() => {
if (isMounted.current) {
fetchData();
}
return () => {
isMounted.current = false;
}
}, [])
const fetchData = () => {
console.log(item);
DataService.getPlantByType(item)
.then((responseJson) => responseJson)
.then((response) => {
setItems(response.data);
})
.catch(function (error) {
console.log(error)
})
}
我使用带有 reset-action 的 dispatch CommonAction 来清除 back-stack 我的应用程序,这样当用户按下硬件 reset-button :
时,应用程序会返回到上一个屏幕<Button
title="Reset navigation state"
onPress={() =>
navigation.dispatch(
CommonActions.reset({
index: 1,
routes: [
{
name: 'Screen 2',
params: {key: route.params.key },
},
{ name: 'Screen 1' },
],
})
)
}
/>