react-native-router-flux
doesn't currently make it possible to hook onto the action when a Scene is
brought into focus, which makes it impossible update a Scene purely based on
navigation. Instead a Scene is currently only rendered if the props
provided to the scene are changed, which is not always possible or convenient.
This module implements a reducer for the navigation state in which it is
possible to indicate which scene components would like to have a method
(navigationStateRouter) called when a Scene is brought into focus.
Installation
npm install --save leifdenby/react-native-router-flux-focus-hook
Where your routes are defined import NavigationStateHandler from
react-native-router-flux-focus-hook (sorry about the rather awkward name) and
change the navigation state reducer
+import NavigationStateHandler from 'react-native-router-flux-focus-hook'
class App extends Component {
render() {
+ const navigationStateHandler = new NavigationStateHandler()
return (
<Router
+ createReducer={navigationStateHandler.getReducer.bind(navigationStateHandler)}
+ navigationStateHandler={navigationStateHandler}
>
<Scene key="root" component={MainComponent}>
<Scene key="root" component={DynamicComponent}>
<Scene key="root" component={OtherComponent}>
</Router>
}
}This ensures that we can hook on to when navigation actions are fired and
that navigationStateRouter is available to every scene component.
Next indicate that a scene component wants to have its
handleNavigationSceneFocus method called when the scene is focussed:
class DynamicComponent extends Component {
componentDidMount() {
+ this.props.navigationStateHandler.registerFocusHook(this)
}
componentWillUnmount() {
+ this.props.navigationStateHandler.unregisterFocusHook(this)
}
handleNavigationSceneFocus() {
+ this.setState({ date: "load new data" })
}
}And finally implement in handleNavigationSceneFocus the functionality you need :)
Pull-requests welcome!