Skip to content

Simple customizable component to create side menu

License

Notifications You must be signed in to change notification settings

linjson/react-native-side-menu

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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>
    );
  }
});

Clicking on any menu item should cause closing menu. It can be done by using menuActions which are passed thru props to menu component. Example looks like this:

var Menu = React.createClass({
  about: function() {
    this.props.menuActions.close();
    this.props.navigator.push({...});
  },

  render: function() {
    return (
      <View>
        <Text>Menu</Text>
        <Text onPress={this.about}>About</Text>
      </View>
    );
  }
});

menuActions consists of following method(s):

  • close (Void) - Close menu
  • toggle (Void) - Toggle menu (close / open)
  • open (Void) - Open menu

Component props

  • menu (React.Component) - Menu component
  • openMenuOffset (Number) - Content view left margin if menu is opened
  • hiddenMenuOffset (Number) - Content view left margin if menu is hidden
  • toleranceX (Number) - X axis tolerance
  • toleranceY (Number) - Y axis tolerance
  • disableGestures (Bool) - Disable whether the menu can be opened with gestures or not
  • onStartShouldSetResponderCapture (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 passed isOpen as an argument
  • menuPosition (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 of prop;
  • 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 to false.

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

About

Simple customizable component to create side menu

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%