React 实现选项卡

这篇博客展示了如何使用React构建一个简单的页面切换组件。通过`Table`类组件,实现了点击选项卡切换内容的功能,并利用`state`来管理当前选中页面的状态。点击每个选项时,`tabFn`函数更新`current`状态,从而改变页面样式。同时,`clsFn`函数根据当前状态确定元素的类名,实现高亮显示当前选中的页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTML 部分

<body>
    <div class="root"></div>
</body>
<script type="text/babel">
     class Table extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
                current: 1
            }
        }
        tabFn(index) {
            this.setState({
                current: index
            })
        }
        clsFn(index, curCls, cls) {
            let { current } = this.state;
            console.log(current)
            return current === index ? curCls : cls;
        }
        componentDidMount() {
            this.tabFn(1)
        }
        render() {
            let { current } = this.state;
            return (
                <div>
                    <div className='tab_con3'>
                        <ol className='abb'>
                            <li onClick={() => { this.tabFn(1) }} className={this.clsFn(1, 'cur3', '')}>第一页</li>
                            <li onClick={() => { this.tabFn(2) }} className={this.clsFn(2, 'cur3', '')}>第二页</li>
                            <li onClick={() => { this.tabFn(3) }} className={this.clsFn(3, 'cur3', '')}>第三页</li>
                        </ol>
 
                        <ul className='acc'>
                            <li className={this.clsFn(1, 'current', '')}>第一页</li>
                            <li className={this.clsFn(2, 'current', '')}>第二页</li>
                            <li className={this.clsFn(3, 'current', '')}>第三页</li>
                        </ul>
                    </div>
                </div>
            );
        }
    }
 
    ReactDOM.render(<Table />, document.querySelector('.root'));


</script>

css样式部分

<style>
    .tab_con3 {
        width: 500px;
        margin: 0 auto;
    }

    .abb {
        height: 40px;
        overflow: hidden;
        margin-bottom: 10px;
    }

    .abb li {
        float: left;
        height: 40px;
        line-height: 40px;
        color: #fff;
        background: #ccc;
        width: 110px;
        text-align: center;
        cursor: pointer;
        margin-right: 40px;
    }

    .acc li {
        height: 260px;
        /* border: 1px solid skyblue; */
        display: none;
    }

    .acc .current {
        display: block;
        background-color: rgb(236, 236, 236);
    }

    .abb .cur3 {
        background: #f60;
    }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值