react-navigation / rfcs

RFCs for changes to React Navigation
Other
88 stars 16 forks source link

API for overriding back button handling #3

Open brentvatne opened 6 years ago

brentvatne commented 6 years ago
mmarvick commented 6 years ago

Is the intention here just to override handling for the Android back button, or to also override handling the up button in a stack navigator on both platforms?

satya164 commented 6 years ago

Should let you inject a back handler that runs before the current screen

What do you mean by injecting a back handler before the current screen? Do you mean before the current screen's back handler is attached? Won't that make it the previous one to be never called since the screen's handler will override that?

Need to be able to disable the back button for any given screen

Do you mean preventing navigating away from the screen or it's only about the hardware back button? I think ability to prevent navigating away is useful, but not sure about only disabling the hardware back button. Though could do that by returning this.props.navigation.isFocused() from a back handler if such a method existed :)

brentvatne commented 6 years ago

@mmarvick - that's a good point, we probably want a generic way to handle any kind of back action and override.

@satya164 - isFocused() would be great! let's do that :)

mmarvick commented 6 years ago

Some related issues:

https://github.com/react-navigation/react-navigation/issues/779 https://github.com/react-navigation/react-navigation/issues/1743 https://github.com/react-navigation/react-navigation/issues/207

In addition to the header back button and the Android hardware back button, goBacks can also be triggered programatically. Any generic solution may want to get callbacks for those as well. I'm not sure how useful that'd be though ¯\_(ツ)_/¯

For what it's worth, being able to use the exported HeaderBackButton as the headerLeft satisfies my main use case for a callback -- a callback would still be a nicer API, but it seems less urgent. It took a bit of digging to find that information though. It might be nice to note with the headerLeft documentation.