(记录笔记4)——4.5 Tabs标签页

4.5 Tabs标签页

选项卡切换组件。

一.Tabs组件

1.Tabs组件

  • 引入Tabs:import { Tabs } from ‘antd’;

  • disabled设置页签不可点

  • <TabPane tab="Tab 2" disabled key="2">Tab 2</TabPane>

import { Tabs } from 'antd';

const TabPane = Tabs.TabPane;

function callback(key) {
  console.log(key);
}

ReactDOM.render(
  <Tabs defaultActiveKey="1" onChange={callback}>
    <TabPane tab="Tab 1" key="1">Content of Tab Pane 1</TabPane>
    <TabPane tab="Tab 2" key="2" disabled>Content of Tab Pane 2</TabPane>
    <TabPane tab="Tab 3" key="3">Content of Tab Pane 3</TabPane>
  </Tabs>,
  mountNode);

二.基本实例

//src\pages\ui\tabs.js
import React from "react";
import "./ui.less";
import { Card, Tabs, message, Icon } from "antd";
const TabPane = Tabs.TabPane;
export default class Tabs1 extends React.Component {
  handleCallback = key => {
    //   console.log(key)
    message.info("Hi,您选择了页签: " + key);
  };
  render() {
    return (
      <div>
        <Card title="Tabs页签" className="card-wrap" >
          <Tabs defaultActiveKey="1" onChange={this.handleCallback}>
            <TabPane tab="Tab 1" key="1">
              欢迎学习React课程
            </TabPane>
            <TabPane tab="Tab 2" key="2">
              欢迎学习React课程
            </TabPane>
            <TabPane tab="Tab 3" key="3">
              React是一门非常受欢迎的MV*框架
            </TabPane>
          </Tabs>
        </Card>
      </div>
    );
  }
}


三. Tab带图标页签

注意:jsx 语法嵌套,要换成对象,这里用到引用 'Icon'的知识 这里指定图标要这样写

  • {}中是根对象,用<span></span>进行包裹,然后定义图标+文字.

<TabPane tab={<span><Icon type="apple" />Tab 1</span>} key="1"/>

//src\pages\ui\tabs.js
import React from "react";
import "./ui.less";
import { Card, Tabs, message, Icon } from "antd";
const TabPane = Tabs.TabPane;
export default class Tabs1 extends React.Component {
  handleCallback = key => {
    //   console.log(key)
    message.info("Hi,您选择了页签: " + key);
  };
  render() {
    return (
      <div>
        <Card title="Tabs页签" className="card-wrap">
          <Tabs defaultActiveKey="1" onChange={this.handleCallback}>
            <TabPane tab="Tab 1" key="1">
              欢迎学习React课程
            </TabPane>
            <TabPane tab="Tab 2" key="2">
              欢迎学习React课程
            </TabPane>
            <TabPane tab="Tab 3" key="3">
              React是一门非常受欢迎的MV*框架
            </TabPane>
          </Tabs>
        </Card>
        <Card title="Tab带图标页签" className="card-wrap">
          <Tabs defaultActiveKey="1" onChange={this.handleCallback}>
            <TabPane
              tab={
                <span>
                  <Icon type="plus" />
                  Tab 1
                </span>
              }
              key="1"
            >
              创建属于你的React项目
            </TabPane>
            <TabPane
              tab={
                <span>
                  <Icon type="edit" />
                  Tab 2
                </span>
              }
              key="2"
            >
              尝试如何使用React进行修改
            </TabPane>
            <TabPane
              tab={
                <span>
                  <Icon type="delete" />
                  Tab 3
                </span>
              }
              key="3"
            >
              删除它,就这么简单
            </TabPane>
          </Tabs>
        </Card>
      </div>
    );
  }
}

四. Tab可关闭卡片式页签

既然是动态添加,就不能写死页签, 通过js变量循环的方式进行显示

  • 定义生命周期方法 componentWillMount/componentDidMount

  • 声明数组存储数据

  • 定义setState存储在 state里

  • type="editable-card"指定样式为可编辑的卡片样式

  • onChange设置页签改变时调用方法,设置激活的key

  • onEdit

  • add

  • remove

//src\pages\ui\tabs.js
import React from "react";
import "./ui.less";
import { Card, Tabs, message, Icon } from "antd";
const TabPane = Tabs.TabPane;
export default class Tabs1 extends React.Component {
  newTabIndex = 0;
  componentWillMount() {
    const panes = [
      {
        title: "Tab 1",
        content: "Tab 1",
        key: "1"
      },
      {
        title: "Tab 2",
        content: "Tab 2",
        key: "2"
      },
      {
        title: "Tab 3",
        content: "Tab 3",
        key: "3"
      }
    ];
    this.setState({
      activeKey: panes[0].key,
      //   panes: panes
      panes
    });
  }
  add = () => {
    const panes = this.state.panes;
    const activeKey = `newTab${this.newTabIndex++}`;
    panes.push({ title: activeKey, content: "New Tab Pane", key: activeKey });
    this.setState({ panes, activeKey });
  };

  remove = targetKey => {
    let activeKey = this.state.activeKey;
    let lastIndex;
    this.state.panes.forEach((pane, i) => {
      if (pane.key === targetKey) {
        lastIndex = i - 1;
      }
    });
    const panes = this.state.panes.filter(pane => pane.key !== targetKey);
    if (lastIndex >= 0 && activeKey === targetKey) {
      activeKey = panes[lastIndex].key;
    }
    this.setState({ panes, activeKey });
  };
  onChange = activeKey => {
    this.setState({
      activeKey
    });
  };
  onEdit = (targetKey, action) => {
    this[action](targetKey);
  };
  handleCallback = key => {
    //   console.log(key)
    message.info("Hi,您选择了页签: " + key);
  };
  render() {
    return (
      <div>
        <Card title="Tabs页签" className="card-wrap">
          <Tabs defaultActiveKey="1" onChange={this.handleCallback}>
            <TabPane tab="Tab 1" key="1">
              欢迎学习React课程
            </TabPane>
            <TabPane tab="Tab 2" key="2" disabled>
              欢迎学习React课程
            </TabPane>
            <TabPane tab="Tab 3" key="3">
              React是一门非常受欢迎的MV*框架
            </TabPane>
          </Tabs>
        </Card>
        <Card title="Tab带图标页签" className="card-wrap">
          <Tabs defaultActiveKey="1" onChange={this.handleCallback}>
            <TabPane
              tab={
                <span>
                  <Icon type="plus" />
                  Tab 1
                </span>
              }
              key="1"
            >
              创建属于你的React项目
            </TabPane>
            <TabPane
              tab={
                <span>
                  <Icon type="edit" />
                  Tab 2
                </span>
              }
              key="2"
            >
              尝试如何使用React进行修改
            </TabPane>
            <TabPane
              tab={
                <span>
                  <Icon type="delete" />
                  Tab 3
                </span>
              }
              key="3"
            >
              删除它,就这么简单
            </TabPane>
          </Tabs>
        </Card>
        <Card title="Tab可关闭卡片式页签" className="card-wrap">
          <Tabs
            onChange={this.onChange}
            activeKey={this.state.activeKey}
            onEdit={this.onEdit}
            type="editable-card"
          >
            {this.state.panes.map(panel => (
              <TabPane tab={panel.title} key={panel.key}>
                {panel.content}
              </TabPane>
            ))}
          </Tabs>
        </Card>
      </div>
    );
  }
}

API#


参数说明类型默认值
defaultActiveKey初始化选中面板的 key,如果没有设置 activeKeystring第一个面板
hideAdd是否隐藏加号图标,在 type="editable-card" 时有效booleanfalse
type页签的基本样式,可选 linecard editable-card 类型string‘line’
onChange切换面板的回调Function(activeKey) {}
onEdit新增和删除页签的回调,在 type="editable-card" 时有效(targetKey, action): void
activeKey当前激活 tab 面板的 keystring

Tabs.TabPane#

参数说明类型默认值
forceRender被隐藏时是否渲染 DOM 结构booleanfalse
key对应 activeKey,决定页签是否被激活string
tab选项卡头显示文字string|ReactNode
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值