Package Exports
- react-native-side-menu
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-native-side-menu) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Customizable side menu for react-native
Content
Installation
npm install react-native-side-menu
Usage example
var SideMenu = require('react-native-side-menu');
var ContentView = React.createClass({
render: function() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+Control+Z for dev menu
</Text>
</View>
);
}
});
var Application = React.createClass({
render: function() {
var menu = <Menu navigator={navigator}/>;
return (
<SideMenu menu={menu}>
<ContentView/>
</SideMenu>
);
}
});
Managing menu state
Managing menu state works thru the exposed menuActions
. To access menuActions
, you need to use context. (there is an awesome article for that).
menuActions
consists of following method(s):
close
(Void) - Close menutoggle
(Void) - Toggle menu (close / open)open
(Void) - Open menu
Usage example:
class Button extends Component {
handlePress(e) {
this.context.menuActions.toggle();
if (this.props.onPress) {
this.props.onPress(e);
}
}
render() {
return (
<TouchableOpacity
onPress={this.handlePress.bind(this)}>
<Text style={this.props.style}>{this.props.children}</Text>
</TouchableOpacity>
);
}
}
/**
* This part is very important. Without it you wouldn't be able to access `menuActions`
* @type {Object}
*/
Button.contextTypes = {
menuActions: React.PropTypes.object.isRequired
};
Component props
menu
(React.Component) - Menu componentopenMenuOffset
(Number) - Content view left margin if menu is opened, defaults to 2/3 of device screen width.hiddenMenuOffset
(Number) - Content view left margin if menu is hiddenedgeHitWidth
(Number) - Edge distance on content view to open side menutoleranceX
(Number) - X axis tolerancetoleranceY
(Number) - Y axis tolerancedisableGestures
(Bool) - Disable whether the menu can be opened with gestures or notonStartShouldSetResponderCapture
(Function) - Function that accepts event as an argument and specify if side-menu should react on the touch or not. Check https://facebook.github.io/react-native/docs/gesture-responder-system.html for more details.onChange
(Function) - Callback on menu open/close. Is passedisOpen
as an argumentmenuPosition
(String) - either 'left' or 'right', defaults to 'left'animationFunction
(Function -> Object) - Function that accept 2 arguments (prop, value) and return an object:prop
you should use at the place you specify parameter to animate;value
you should use to specify the final value ofprop
;
animationStyle
(Function -> Object) - Function that accept 1 argument (value) and return an object:value
you should use at the place you need current value of animated parameter (left offset of content view)
touchToClose
(Bool) - Allows for touching the partially hidden view to close the menu. Defaults tofalse
.defaultOpen
(Bool) - Allows for opening the side menu by default when it's rendered for the first time. Defaults tofalse
.
In progress
Special thanks
Creating this component has been inspired by @khanghoang's RNSideMenu example.
Also, thanks to @ericvicenti for help with figuring out with setNativeProps
Questions?
Feel free to contact me in twitter or create an issue