react使用hook封装一个tab组件

react使用hook封装一个tab组件

Tabbar.jsx

import PropsTypes from "prop-types";
import React, { useEffect, useState } from 'react';
export default function Tabbar(props) {
  const {  tabData , current } = props
  const [currentTab,setCurrentTab] = useState('test')
    const tabchange = (item) => {
      setCurrentTab(item.key)
    }
    useEffect(()=>{
      setCurrentTab(current)
    },[current])
    return (
        <div style={{display: 'flex',justifyContent: 'space-around',alignItems: 'center'}}>
          {
            tabData.map(item=>{
              return (
                <div
                  style={{
                    flex:'1',textAlign:'center',marginRight:'5px',cursor:'pointer',
                    color: item.key === currentTab ? 'red' : '#000',
                    background: item.key === currentTab ? '#ccc' : '#eee',
                  }}
                  key={item.key}
                  onClick={ () => tabchange(item) }
                >
                  { item.name }
                </div>
              )
            })
          }
        </div>
    )
}

Tabbar.propTypes = {
  current:  PropsTypes.oneOfType([PropsTypes.string, PropsTypes.number]),
  tabData: PropsTypes.array.isRequired
};
Tabbar.defaultProps = {
  tabData: [
    {
      name:'测试1',
      key:'test1'
    },
    {
      name:'测试2',
      key:'test2'
    },
  ],
  current:''
};

使用组件

import React from 'react';
import Tabbar from "../tabbar/Tabbar";
export default function App(props) {
  const tabData = [
    {
      name:'篮球',
      key:'1'
    },
    {
      name:'足球',
      key:'2'
    },
    {
      name:'排球',
      key:'3'
    }
  ]
  const current = '2'

    return (
        <div className='content'>
          <Tabbar tabData={tabData} current={current} ></Tabbar>
          <div style={{marginBottom: '10px'}}></div>
          <Tabbar></Tabbar>
        </div>
    )
}

效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值