rn-stack-router
v1.0.0
Published
React Native Stack Navigation based on URIs
Downloads
1
Maintainers
Readme
React Native Stack Router
This is a simpler way to use Navigator with URI driven navigation facilitating simple transfer of data between Screens.
This component provides Navigation and 2 useful utilities to provide Stack Like navigation.
Quick start
Install:
npm install --save rn-stack-router
Add it you your application:
First let create a Screen
import React from 'react';
import {
Text,
Navigator
Platform
} from 'react-native';
import { NavigationHelper, Screen } from 'rn-stack-router';
export default class MyFirstScreen extends Screen {
constructor(props) {
super(props);
}
static screenName() {
return 'myscreen';
}
static routeName() {
return '/myscreen';
}
static getDefaultProps() {
return {
defaultAnimation: Navigator.SceneConfigs.FadeAndroid,
useCache: false,
props: {
id: 'something'
}
};
}
render() {
return (
<Text>Hello World</Text>
);
}
}
import React from 'react';
import {AppRegistry} from 'react-native';
import {
Router,
RouteNavigator,
NavigationHelper
} from 'rn-stack-router';
import MyFirstScreen from './MyFirstScreen';
class MyApp extends React.Component {
render() {
return <RouteNavigator initialRouteStack={[{name: '/myscreen'}]}
router={this.router}
app={this} />;
}
get router() {
var _router = NavigationHelper.getRouter();
// Add Routes if empty
if (!NavigationHelper.hasRoutes()) {
this.addRoutes();
}
// Return the router
return _router;
}
addRoutes() {
var options = {};
// Add our routes here
NavigationHelper.addRoute(MyFirstScreen);
}
}
AppRegistry.registerComponent('MyApp', () => MyApp);
RouteNavigator
This extends reacts Navigator class.
app
- Application reference to pass to all managed components.Router
- The composed router to use for route navigation.
Screen
When you define an screen there are some important steps to folow:
- Your Component must extend from Screen instead of React.Component
export default class MyScreen extends Screen {
}
- Define screenName static Method. This method will give the Screen a name
static screenName() {
return 'myscreen';
}
- Define routeName static Method. This method will give the Screen the route-parser URI.
static routeName() {
return '/myscreen';
}
Optional
You can define some options on the View using the getDefaultProps static method
static getDefaultProps() {
return {
defaultAnimation: Navigator.SceneConfigs.FadeAndroid,
useCache: false,
props: {
id: 'something'
}
};
}
How To Navigate
You can navigate using NavigationHelper
Methods:
- NavigationHelper.push: push the view into the Stack
- NavigationHelper.pop: Navigates back to the previous view on the Stack
- NavigationHelper.replace: Replace the current View from the Stack
Nav Object Components:
name
- The name or URI of the routeanimation
- The animation to use for the transitionprops
- Additional props to use for the controllerbody
- The body object to pass to the controller.
Examples:
// Go back to previous controller in route stack
NavigationHelper.pop();
// Navigate By URI
NavigationHelper.push('/myscreen/123');
// URI with Non Default Animation
NavigationHelper.push({
name: '/myscreen/123',
animation: Navigator.SceneConfigs.FadeAndroid,
props: {
isRed: true
},
body: {
id: 'my_id'
}
});
// Navigate By Name
NavigationHelper.push('page1');
NavigationHelper.push({ name: 'page1'});
Reading Navigation Query/Body
Important To receive body and query you must query them from componentDidMount
You can receive URI parameters via this.state.query
and the body object via this.state.body
.
Credits
This Navigation component is heavily inspired on react-native-route-navigator.