| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
A cross-platform Tab View component for React Native.
This is a JavaScript-only implementation of swipeable tab views. It's super customizable, allowing you to do things like coverflow.
Requires React Native version >= 0.36.
npm install --save react-native-tab-view react-addons-shallow-compareimport React, { Component } from 'react';
import { View, StyleSheet } from 'react-native';
import { TabViewAnimated, TabBarTop } from 'react-native-tab-view';
const styles = StyleSheet.create({
container: {
flex: 1,
},
page: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
});
export default class TabViewExample extends Component {
state = {
index: 0,
routes: [
{ key: '1', title: 'First' },
{ key: '2', title: 'Second' },
],
};
_handleChangeTab = (index) => {
this.setState({ index });
};
_renderHeader = (props) => {
return <TabBarTop {...props} />;
};
_renderScene = ({ route }) => {
switch (route.key) {
case '1':
return <View style={[ styles.page, { backgroundColor: '#ff4081' } ]} />;
case '2':
return <View style={[ styles.page, { backgroundColor: '#673ab7' } ]} />;
default:
return null;
}
};
render() {
return (
<TabViewAnimated
style={styles.container}
navigationState={this.state}
renderScene={this._renderScene}
renderHeader={this._renderHeader}
onRequestChangeTab={this._handleChangeTab}
/>
);
}
}The package exposes the following components,
Container component responsible for managing tab transitions
It accepts the following props,
A convenience wrapper around <TabViewTransitioner />
It accepts the following props in addition to all the props accepted by <TabViewTransitioner /> (except render),
Pager component based on PanResponder (default)
It accepts the following props,
Pager component based on ScrollView
It accepts the following props,
Pager component based on ViewPagerAndroid It accepts the following props,
Basic tab bar
It accepts the following props,
Material design themed top tab bar
It accepts the following props in addition to the props accepted by <TabBar />,
Check the type definitions for details on shape of different objects.
<TabViewAnimated /> and <TabViewTransitioner /> implement shouldComponentUpdate to prevent unnecessary re-rendering. As a side-effect, the tabs won't re-render if something changes in the parent's state. If you need it to trigger a re-render, put it in the navigationState.
For example, consider you have a loaded property on state which should trigger re-render. You can have your state like the following -
state = {
index: 0,
routes: [
{ key: '1', title: 'First' },
{ key: '2', title: 'Second' },
],
loaded: false,
}Then pass this.state as the navigationState prop to <TabViewAnimated /> or <TabViewTransitioner />.
<TabViewAnimated
navigationState={this.state}
renderScene={this._renderPage}
renderHeader={this._renderHeader}
onRequestChangeTab={this._handleChangeTab}
/>The renderScene function is called every time the index changes. If your renderScene function is expensive, it's good idea move it to a separate component if your renderScene function doesn't depend on the index, and apply shouldComponentUpdate to prevent unnecessary re-renders.
If you've a large number of routes, especially images, it can slow the animation down a lot. You can instead render a limited number of routes. In your renderScene function, do the following to render only 2 routes on each side,
renderScene = ({ route }) => {
if (Math.abs(this.state.navigation.index - this.state.navigation.routes.indexOf(route)) > 2) {
return null;
}
return <MySceneComponent route={route} />;
};zIndex in React Native is buggy which results in weird behaviour when you remove adjacent items from the hierarchy. You can try setting zIndex to 0 for the TabBar to avoid the issue.
| Back | FazBrowse Home | New Git URL |