Giter VIP home page Giter VIP logo

react-swipeable-tab's Introduction

react-swipeable-tab

一个可滑动切换,异步加载数据,具有流畅滚动特性的 React-Tab 组件

参考了react-tabtab提供的组件,在此基础上进行了功能特性的丰富

使用

install

npm i react-swipeable-tab --save

import

import { Tab, Tabs, TabList, PanelList, Panel, AsyncPanel } from "react-swipeable-tab";

Simple Tab

一个简单用法的 tab

import React, { Component } from "react";
import { Tab, Tabs, TabList, Panel, PanelList } from "react-swipeable-tab";

export default class Demo extends Component {
  constructor(props) {
    super(props);
    this.state = {
      tab1_activeIndex: 0
    };
  }
  onTab1_Change = index => {
    this.setState({
      tab1_activeIndex: index
    });
  };

  render() {
    const { tab1_activeIndex } = this.state;
    return (
      <Tabs activeIndex={tab1_activeIndex} onTabChange={this.onTab1_Change}>
        <TabList style={{ height: "40px" }}>
          <Tab>tab1</Tab>
          <Tab>tab2</Tab>
          <Tab>tab3</Tab>
        </TabList>
        <PanelList style={{ height: "100px" }}>
          <Panel>
            <p>content1</p>
            <p>content1</p>
            <p>content1</p>
            <p>content1</p>
            <p>content1</p>
            <p>content1</p>
            <p>content1</p>
            <p>content1</p>
          </Panel>
          <Panel>content2</Panel>
          <Panel>content3</Panel>
        </PanelList>
      </Tabs>
    );
  }
}

Multipe Tab

多 tab 导航栏

import React, { Component } from "react";
import { Tab, Tabs, TabList, Panel, PanelList } from "react-swipeable-tab";

export default class Demo extends Component {
  constructor(props) {
    super(props);
    this.state = {
      tab2_activeIndex: 0
    };
  }
  onTab2_Change = index => {
    this.setState({
      tab2_activeIndex: index
    });
  };

  render() {
    const { tab2_activeIndex } = this.state;
    return (
      <Tabs
        activeIndex={tab2_activeIndex}
        onTabChange={this.onTab2_Change}
        page={5}
      >
        <TabList style={{ height: "40px" }}>
          <Tab>tab1</Tab>
          <Tab>tab2</Tab>
          <Tab>tab3</Tab>
          <Tab>tab4</Tab>
          <Tab>tab5</Tab>
          <Tab>tab6</Tab>
          <Tab>tab7</Tab>
          <Tab>tab8</Tab>
          <Tab>tab9</Tab>
        </TabList>
        <PanelList style={{ height: "100px" }}>
          <Panel>content1</Panel>
          <Panel>content2</Panel>
          <Panel>content3</Panel>
          <Panel>content4</Panel>
          <Panel>content5</Panel>
          <Panel>content6</Panel>
          <Panel>content7</Panel>
          <Panel>content8</Panel>
          <Panel>content9</Panel>
        </PanelList>
      </Tabs>
    );
  }
}

AnimateHeight Tab

自动调整高度伸缩 tab

import React, { Component } from "react";
import { Tab, Tabs, TabList, Panel, PanelList } from "react-swipeable-tab";

export default class Demo extends Component {
  constructor(props) {
    super(props);
    this.state = {
      tab3_activeIndex: 0
    };
  }
  onTab3_Change = index => {
    this.setState({
      tab3_activeIndex: index
    });
  };

  render() {
    const { tab3_activeIndex } = this.state;
    return (
      <Tabs
        animateHeight={true}
        activeIndex={tab3_activeIndex}
        onTabChange={this.onTab3_Change}
      >
        <TabList style={{ height: "40px" }}>
          <Tab>tab1</Tab>
          <Tab>tab2</Tab>
          <Tab>tab3</Tab>
        </TabList>
        <PanelList style={{ height: "50px" }}>
          <Panel minPanelHeight={"50px"} style={{ height: "50px" }}>
            content1
          </Panel>
          <Panel minPanelHeight={"150px"} style={{ height: "100px" }}>
            content1
          </Panel>
          <Panel minPanelHeight={"350px"} style={{ height: "150px" }}>
            content1
          </Panel>
        </PanelList>
      </Tabs>
    );
  }
}

Async Loading Tab

异步加载内容 tab

import React, { Component } from "react";
import { Tab, Tabs, TabList, AsyncPanel, PanelList } from "react-swipeable-tab";

export default class Demo extends Component {
  constructor(props) {
    super(props);
    this.state = {
      tab4_activeIndex: 0
    };
  }
  onTab4_Change = index => {
    this.setState({
      tab4_activeIndex: index
    });
  };
  loadingConetent = () => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("content");
      }, 2000);
    });
  };

  render() {
    const { tab4_activeIndex } = this.state;
    return (
      <Tabs activeIndex={tab4_activeIndex} onTabChange={this.onTab4_Change}>
        <TabList style={{ height: "40px" }}>
          <Tab>tab1</Tab>
          <Tab>tab2</Tab>
          <Tab>tab3</Tab>
        </TabList>
        <PanelList style={{ height: "100px" }}>
          <AsyncPanel
            loadContent={this.loadingConetent}
            render={data => <div>{data}</div>}
            renderLoading={() => <div>loading...</div>}
          />
          <AsyncPanel
            loadContent={this.loadingConetent}
            render={data => <div>{data}</div>}
            renderLoading={() => <div>loading...</div>}
          />
          <AsyncPanel
            loadContent={this.loadingConetent}
            render={data => <div>{data}</div>}
            renderLoading={() => <div>loading...</div>}
          />
        </PanelList>
      </Tabs>
    );
  }
}

API

<Tabs />

属性 类型 默认值 说明
defaultIndex int null 初始化tab的显示面板
activeIndex int null 当前激活的tab面板的key
onTabChange () => tabIndex null 返回被点击的面板的key
你可以使用这个方法更新面板的activeIndex,来切换tab
style object null 自定义组件样式
className string null 设置添加样式类名
swiperMove boolean true 是否开启滑动切换tab
animate boolean true 是否开启滑动切换动画特性
showInk boolean true 顶部tab导航栏当前激活的面板是否底部显示横线标识
inkColor string '#2A84F8' 顶部tab导航栏当前激活的面板底部横线颜色
activeTabColor string '#2A84F8' 顶部tab导航栏当前激活的面板文字颜色
panelIscroll boolean true tab内容面板是否使用iscroll组件,具有iscroll滚动的特性
threshold int 5 快速切屏的时间阈值系数
page int null 屏幕最多显示多少个tab导航面板

<TabList />

用来包裹 <Tab /> 组件

属性 类型 默认值 说明
style object null 自定义组件样式
className string null 设置添加样式类名

<Tab />

顶部 tab 导航栏面板

属性 类型 默认值 说明
style object null 自定义组件样式
className string null 设置添加样式类名

<PanelList />

用来包裹 <Panel /> 组件

属性 类型 默认值 说明
style object null 自定义组件样式
className string null 设置添加样式类名

<Panel />

内容面板

属性 类型 默认值 说明
style object null 自定义组件样式
className string null 设置添加样式类名
panelIscrollOptions object { fadeScrollbars: true, } iscroll组件配置

<AsyncPanel />

具有异步加载数据功能的内容面板

属性 类型 默认值 说明
style object null 自定义组件样式
className string null 设置添加样式类名
panelIscrollOptions object { fadeScrollbars: true, } iscroll组件配置
loadContent (cb) => cb(error, data)or(cb) => Promise null 需要异步加载数据的回调函数
render (data) => Component null 数据加载完成后渲染的组件
renderLoading () => Component null 在进行数据异步加载时填充的loading组件
cache boolean true 加载后是否缓存数据

react-swipeable-tab's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.