react-navigation の defaultGetStateForAction を使用してナビゲーションをインターセプトしているため、保存されていないデータがあることをユーザーに警告し、ナビゲーションを続行して保存されていないデータを削除するか、最初に保存するかを選択できます。このデータは、screenProps を介して利用可能な関数によってアクセスできる、より高いコンポーネントの状態に格納されます。
だから...ここに私のコードがあります:
const CreateAnimalStack = createStackNavigator({
CreateAnimal: { screen: createAnimalScreen },
ListAnimals: { screen: listAnimalsScreen },
DetailAnimal: { screen: detailAnimalScreen },
ReviewAnimal: { screen: reviewAnimalScreen },
ListMarks: { screen: listMarksScreen },
CreateMark: { screen: createMarkScreen },
}, {
initialRouteName: 'CreateAnimal',
});
const defaultGetStateForAction = CreateAnimalStack.router.getStateForAction;
CreateAnimalStack.router.getStateForAction = (action, state) => {
if (
state &&
action.type === NavigationActions.BACK &&
state.routeName === 'CreateAnimal' &&
state.routes[state.index].routeName === 'ReviewAnimal' &&
state.index === 1
) {
Alert.alert(
'Alert Title',
'My Alert Msg',
[
{ text: 'Ask me later', onPress: () => console.log('Ask me later pressed') },
{
text: 'Cancel',
onPress: () => {
return null;
},
style: 'cancel',
},
{
text: 'OK', onPress: () => {
const routes = [
{ routeName: 'CreateAnimal' },
];
return {
...state,
routes,
index: 0,
};
}
},
],
{ cancelable: false },
);
return state;
}
return defaultGetStateForAction(action, state);
};
export default CreateAnimalStack;