用 react + “ant-design-pro 的 Tabs“ 实现顶部菜单·记

目录

1、页面顶部添加 tab,点击切换 tab 时,可切换

2、将 tab 与路由相关

3、问题解决

问题一:tab 没有据页面头部水平垂直居中,何解?

问题二: tab 字体的样式默认都为蓝色,如何还原 ant-design-pro 的样式?

问题三:点击文字可以切换,但是点击 tab 的非文字部分不会切换,何解?


1、页面顶部添加 tab,点击切换 tab 时,可切换

import { Tabs } from "antd";
import { useEffect, useState } from "react";
import "./index.less";

const panes = [{
  key: "one",
  title: "tab1",
},{
  key: "two",
  title: "tab2",
}]

<div className="header-tabs">
  <Tabs 
    size="large" 
    type="line"
    tabPosition="top"
    animated={false}
    onChange={handleSwitchPanel}
  >
    { panes.map( pane => {
      return (
        <TabPane
          key={ pane.key }
          tab={ pane.title }
        ></TabPane>
      );
    })}
  </Tabs>
</div>

2、将 tab 与路由相关

在上述代码的基础上添加或修改:

// ...
import { Link } from "react-router-dom";

const [currentTab, setCurrentTab] = useState("");

// 获取当前路由
const currentRoute = location.pathname;

const panes = [{
  key: "one",
  title: "tab1",
  path: "/a"
},{
  key: "two",
  title: "tab2",
  path: "/b"
}]

useEffect(() => {
  setCurrentTab(currentRoute.split('/')[1])
}, [currentRoute]);

const handleSwitchTab = () => {
  if(currentRoute==="/a"){
    setCurrentTab("one");
  }
  if(currentRoute==="/b"){
    setCurrentTab("two");
  }
}

<div className="header-tabs">
  <Tabs 
    // ...
  >
    { panes.map( pane => {
      return (
        <TabPane
          // ...
          tab={ 
            <Link 
              to={{pathname: pane.path}}
            >{ pane.title }</Link>
          }
        ></TabPane>
      );
    })}
  </Tabs>
</div>

3、问题解决

问题一:tab 没有据页面头部水平垂直居中,何解?

问题解决:

<Tabs
  // ...
  centered={true}
  tabBarGutter={100}
  tabBarStyle={{marginBottom: '0px', lineHeight: '18px'}}
>
  // ...
</Tabs>
// index.less
.header-tabs {
  margin: 0 auto;
  padding-left: 100px;
}

问题二: tab 字体的样式默认都为蓝色,如何还原 ant-design-pro 的样式?

问题解析:由于 Link 自动被浏览器编译为一个包含 a 标签的 div,所以字体默为 a 标签的蓝色。

问题解决:

<TabPane
  // ...
  tab={ 
    <Link 
      // ...
      className={ pane.key === currentTab ? "selected-color" : "default-color" }
    >
      // ...
    </Link>
  }
></TabPane>
// index.less
@import '~antd/lib/style/themes/default.less';// 引入官方提供的颜色文件

.headers-tabs {
  .select-text-color{
    color: @primary-color;// color: rgb(24, 144, 255);
  }
  .default-text-color{
    color: @select-item-selected-color;// color:rgb(105, 103, 103);
  }
}

问题三:点击文字可以切换,但是点击 tab 的非文字部分不会切换,何解?

问题分析:

这是由于 TabPane 的  tab 属性嵌套了 Link 所致,Link 被渲染出来的 a 标签,大小只有文字撑开的尺寸,所以,在 Link 上指定的路径,只在文字上有效,只有点击文字才会跳转。

问题解决:

能用 CSS 很快解决的问题不要用 JavaScript。

<Tabs
  className="tabs"
  // ...
>
  { panes.map( pane => {
    return (
      <TabPane
        tab={
          <Link
            className="pane_link"
            style={{color: pane.key === proCurTab && 'rgb(24, 144, 255)'}}
            // ...
          >
            //...
          </Link>
        }
      ></TabPane>
    )
  }) }
</Tabs>
// index.less

.headers-tabs{
  .tabs{
    .ant-tabs-tab{
      padding: 0px;
    }
    .pane_link{
      display: block;
      padding: 16px 0;
      color: @select-item-selected-color;// rgb(105, 103, 103)
    }
  }
}

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Ant Design Pro 中实现Tab页切换功能非常简单,只需要使用 `Tabs` 和 `TabPane` 组件即可。 以下是一个基本的示例代码: ```jsx import { Tabs } from 'antd'; const { TabPane } = Tabs; function callback(key) { console.log(key); } function TabDemo() { return ( <Tabs defaultActiveKey="1" onChange={callback}> <TabPane tab="Tab 1" key="1"> Content of Tab Pane 1 </TabPane> <TabPane tab="Tab 2" key="2"> Content of Tab Pane 2 </TabPane> <TabPane tab="Tab 3" key="3"> Content of Tab Pane 3 </TabPane> </Tabs> ); } export default TabDemo; ``` 在上面的示例中,我们首先引入了 `Tabs` 和 `TabPane` 组件,然后定义了一个回调函数 `callback` 来处理切换事件。接着在 `Tabs` 中定义了三个 `TabPane`,每个 `TabPane` 都有一个唯一的 `key` 属性和对应的标签名。我们将默认激活的 `TabPane` 设置为第一个,通过 `onChange` 属性来监听切换事件并调用 `callback` 函数。 最后,我们将 `TabDemo` 组件导出,可以在其他组件中引入并使用。 ### 回答2: Ant Design Pro 是一个基于 Ant Design 设计规范的企业级中后台前端/设计解决方案,提供了丰富的组件和布局样式,使得开发者可以快速构建出美观、实用的管理系统。 要实现 tab 页切换功能,可以使用 Ant Design Pro 中提供的 Tabs 组件。使用 Tabs 组件,需要在业务组件中引入 Tabs、TabPane 组件,并通过 state 来控制当前选中的标签页。 首先,在业务组件中引入 Tabs 和 TabPane 组件: ```javascript import { Tabs } from 'antd'; const { TabPane } = Tabs; ``` 然后,使用 Tabs 组件创建标签页,并通过 state 来控制当前选中的标签页: ```javascript class MyComponent extends React.Component { state = { activeKey: '1', // 选中的标签页的 key } onChange = activeKey => { this.setState({ activeKey }); } render() { const { activeKey } = this.state; return ( <Tabs activeKey={activeKey} onChange={this.onChange}> <TabPane tab="Tab 1" key="1"> Content of Tab Pane 1 </TabPane> <TabPane tab="Tab 2" key="2"> Content of Tab Pane 2 </TabPane> <TabPane tab="Tab 3" key="3"> Content of Tab Pane 3 </TabPane> </Tabs> ); } } ``` 在上面的代码中,Tabs 组件的 activeKey 属性用来设置当前选中的标签页,onChange 属性用来监听标签页切换事件。通过在 state 中保存选中的标签页的 key,并在切换标签页时更新 activeKey 的值来实现标签页的切换。 以上就是使用 Ant Design Pro 实现 tab 页切换功能的步骤。通过引入 Tabs 和 TabPane 组件,并结合 state 来控制选中的标签页,可以实现简单而实用的标签页切换功能。 ### 回答3: Ant Design Pro 是一个开箱即用的企业级中后台前端/设计解决方案,提供了丰富的组件和模板,快速搭建出符合企业需求的系统。要实现 Tab 页切换功能,需要进行以下步骤: 1. 在 Ant Design Pro 项目中,安装 react-router-dom 库,用于实现路由功能。 2. 在 src 目录下创建一个新的文件夹 pages,用于存放各个页面组件。 3. 在 pages 文件夹下创建一个新的文件,例如 TabPage.js,用于编写 Tab 页的内容。 4. 在 TabPage.js 文件中,使用 Ant Design Pro 提供的 Tabs 组件,创建一个选项卡布局。 5. 在 Tabs 组件的 TabPane 子组件中,通过编写 JSX 代码,实现各个 Tab 页的内容。 6. 在 TabPage.js 文件中,使用 react-router-dom 提供的路由功能,将 Tabs 组件与对应的 Tab 页内容进行绑定。 7. 在 src 目录下的 router.js 文件中,配置路由表,将 TabPage.js 组件与对应的路径进行映射。 8. 在 src 目录下的 menu.js 文件中,配置菜单选项,将 Tab 页添加到菜单中,作为可点击的选项。 9. 运行 Ant Design Pro 项目,在菜单中点击选项,即可实现 Tab 页的切换功能。 以上步骤中,关键点是使用 react-router-dom 进行路由配置,并将 Tabs 组件与路由进行绑定。这样点击菜单选项时,路由会发生变化,Tabs 组件会显示对应的 Tab 页内容。另外,利用 Ant Design Pro 提供的 Tabs 组件和其属性,可以对选项卡的样式、布局、切换方式等进行自定义设置,以满足实际需求。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值