Flexible tab components for react.
Using npm:
$ npm install --save @bsonntag/react-tabs
Using yarn:
$ yarn add @bsonntag/react-tabs
This module uses react's createContext
API,
so make sure you have at least version 16.3.0 installed.
import { Tab, TabPanel, Tabs } from '@bsonntag/react-tabs';
import React, { Component } from 'react';
class App extends Component {
state = {
selectedTab: 0
};
handleSelect = selectedTab => this.setState({ selectedTab });
render() {
return (
<Tabs
onSelect={this.handleSelect}
selectedTab={this.state.selectedTab}
>
<ul>
<Tab tab={0}>
{({ select }) => (
<li onClick={select}>
{'First tab'}
</li>
)}
</Tab>
<Tab tab={1}>
{({ select }) => (
<li onClick={select}>
{'Second tab'}
</li>
)}
</Tab>
</ul>
<TabPanel tab={0}>
{isSelected => isSelected && (
<div>
{'First tab content'}
</div>
)}
</TabPanel>
<TabPanel tab={1}>
{isSelected => isSelected && (
<div>
{'Second tab content'}
</div>
)}
</TabPanel>
</Tabs>
);
}
}
This module contains three components.
Works mainly as a provider. It only renders its children.
This is a controlled component, so you'll have to save the selected tab on another component's state.
This component only renders its children.
The event handler that is called when a tab is selected. This is called with the selected tab.
The currently selected tab.
This component receives a function as its children. It calls the children function with an object with two properties:
isSelected
: this will be true if the tab is selected.select
: a function to call when this tab is selected.
This component will render the result of calling its children.
This tab's identifier.
This component receives a function as its children. It calls the children function with an a boolean that will be true if the tab is selected.
This component will render the result of calling its children.
This tab's identifier.
Please feel free to submit any issues or pull requests.
MIT