index.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React, { useState } from 'react'
  2. import styles from './index.module.css'
  3. interface TabProps {
  4. titles: Array<string>
  5. children: any,
  6. showIndex?: number,
  7. changeHandle?: Function
  8. }
  9. function Tab({ children, titles, showIndex = 1, changeHandle }: TabProps) {
  10. let [index, setIndex] = useState(showIndex - 1)
  11. if (!(children instanceof Array)) {
  12. children = [children]
  13. }
  14. if (titles.length < children.length) {
  15. let less = children.length - titles.length
  16. for (let i = 0; i < less; i++) {
  17. titles.push('Tab')
  18. }
  19. }
  20. const clickHandle = (i: number) => {
  21. setIndex(i)
  22. changeHandle && changeHandle(i + 1)
  23. }
  24. return (
  25. <div className={styles.tabLayer}>
  26. <div className={styles.headLayer}>
  27. {titles.map((title: string, i: number) => (
  28. <span
  29. key={i}
  30. className={index === i ? styles.active : ''}
  31. onClick={() => clickHandle(i)}>
  32. {title}
  33. </span>
  34. ))}
  35. </div>
  36. {children.map((Fn: any, i: number) => (
  37. <div className={index === i ? styles.showlayer : styles.hidelayer} key={i}>
  38. {Fn}
  39. </div>
  40. ))}
  41. </div>
  42. )
  43. }
  44. export default Tab