React Sidebar Component

Donate npm npm npm

Demo

Check the demo.

Installation

You can install react-side-bar by executing this command:

npm install --save react-side-bar

When the installation process ends, you are ready to import react-side-bar to your project.

How to Use

To use react-side-bar you have to import the component in your project:

import Sidebar from 'react-side-bar';

You can add more properties to react-side-bar, see the list of available properties in Properties section.

Adding a Button to Open the Sidebar

If you want to add a button for opening and closing react-side-bar (hamburguer menu for example), you need to reference the state of the sidebar, e.g.:

constructor(props) {
  this.state = {
    opened: false // (or true)
  }
}

This way, there are two mandatory methods you need to define

The purpose of this properties is to keep the opened property updated. To achieve this, you need to trigger setState to change the value of the opened property. For exmaple:

Close:

() => {
  this.setState({ opened: false });
}

Open:

() => {
  this.setState({ opened: true });
}

Moreover you can use this functions to add some extra functionality for your application, such as triggers, when opening or closing react-side-bar.

Once you have the object with properties, you can init the component Sidebar.

<Sidebar
	bar={<div>Amazing Sidebar</div>}
	opened={this.state.opened}
	onClose={() => {
		this.setState({ opened: false })
	}}
	onOpen={() => {
		this.setState({ opened: true })
	}}
	size={300}
/>

Output:

To add content for the application you just have to add children inside Sidebar.

<Sidebar>
	<div className='topBar'>SIDEBAR</div>
	<div className='main'>Main</div>
</SideBar>

With style and some improvements, it could be like this:

With react-side-bar you can pass the topBar component (passed as a children in the example above) as a property to change the effect when opening.

<Sidebar
	bar={<div>Amazing Sidebar</div>}
	topBar={<div className='topBar'>SIDEBAR</div>}
	size={300}
>
	<div className='main'>
		Main
	</div>
</SideBar>

Properties

duration (number)

Default: 150

This is the time it takes to open or close the sidebar.

fx (string)

Default: cubic-bezier(0, 1, 0.85, 1)

This is the effect of the sidebar when opening, o can test the default effect in http://cubic-bezier.com or perhaps add another different effect. Effects

mode (string: Sidebar.BEHIND | Sidebar.OVER | Sidebar.PUSH)

Default: Sidebar.OVER

This property allows to change the opening mode of the sidebar, you can choose from three different:

opened (boolean: true | false)

Default: false

This property shows or hides the sidebar. Depending on the sidebar state, its wrapper element features class="side-bar-content opened" or class="side-bar-content closed" class names.

side (string: Sidebar.LEFT | Sidebar.RIGHT)

Default: Sidebar.LEFT

This property allows to change the side of the opening of the sidebar.

size (number)

Default: 256

This property allows to change the width of the sidebar.

tolerance (number)

Default: 70

This property sets the tolerance to calculate the sensibility of the automatic opening of the sidebar.

touch (boolean: true | false)

Default: true

This property allows to enable or disable touch events. If its value is false you have to add another alternative method to open sidebar as a hamburguer menu.

touchSize (number)

Default: 80

With this property you can set the size of the touchable zone to start dragging the sidebar. The value of 0 means that you can drag the sidebar everywhere.

veilStyle (object)

Default: {}

You can define the final style of the veil over the content of application when the sidebar is open. While the sidebar is opening, this style have a opacity depending of the veil opening progress.

You can also use CSS to style the veil by applying styles to .side-bar-veil.

Contribution

If you want to do your own changes, share with community and contribute with the project:

git clone https://github.com/mschez/react-side-bar.git
cd react-side-bar
npm install
npm run dev

Now you can check the demo in http://localhost:3000

Don’t forget to check touch actions using the developer tools devices emulation.

Important

If you like this project, don’t forget buy me a beer. ¡Thank you!

Donate