React中TypeScript中选项卡(附css样式)

import { Component } from "react";
import './Tab.less'
interface Props{

}
interface User{
    ID:string,
    text:string,
}
interface iText{
    ID:string,
    text:string,
}
interface State{
    ButtonIndex:number,
    ButtonArray:User[],
    TextArray:iText[]
}

class Tab extends Component<Props,State>{
    // eslint-disable-next-line
    constructor(props:Props){
        super(props)
        this.state={
            ButtonIndex:0,
            ButtonArray:[
                {ID:"a1",text:"按钮一"},
                {ID:"a2",text:"按钮二"},
                {ID:"a3",text:"按钮三"}
            ],
            TextArray:[
                {ID:"c1",text:"内容一"},
                {ID:"c2",text:"内容二"},
                {ID:"c3",text:"内容三"}
            ],
        }
    }
    FnTab(index:number):void{
        this.setState({
            ButtonIndex:index
        })
    }
    render(){
        let ButtonArray = this.state.ButtonArray
        let TextArray = this.state.TextArray
        let ButtonIndex = this.state.ButtonIndex
        return (<div className="testtab">
            {
                ButtonArray.map((item,index)=><button key={item.ID} onClick={this.FnTab.bind(this,index)}  className={ButtonIndex===index?"testtab-button ac":"testtab-button"}>{item.text}</button>)
            }
             {
                TextArray.map((item,index)=><div key={item.ID} style={{display:ButtonIndex===index?'block':'none'}} className="testtab-text">{item.text}</div>)
            }
            </div>)
    }
}
export default Tab;
.testtab{
    .testtab-button.ac{
        background-color: salmon;
    }
    .testtab-text{
        width: 300px;
        height: 280px;
        border: 1px solid #000;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值