react中如何做成 tab 切换的效果

Antd Design 中有一个 tab 切换的组件,但是个人觉得不是所有情况都需要用到这个。组件中有个 Radio 的样式类似于这个 tab 的操作。

 

这是官方面组件给出的样子,不同于之前 radio 单选按钮圆圈式的。

 

现在我想做成三个 按钮式的,并且每个按钮分别对应不同的 tab。

 

步骤:

 

    第一步:先把样式写好,组件引入 

 

const RadioButton = Radio.Button;

const RadioGroup = Radio.Group;

 

    <FormItem

        label="类型"

    >

        {getFieldDecorator('searchtype', {

            initialValue:1

        })(

            

            <RadioGroup onChange = {this.handleLink}>

                <RadioButton value={1}>商品汇总</RadioButton>

                <RadioButton value={2}>单据汇总</RadioButton>

                <RadioButton value={3}>明细查询</RadioButton>

            </RadioGroup>

        )}

    </FormItem>

 

    // 类型

    handleLink = (e)=>{

        const {

            dispatch,

            form

        } = this.props;

 

 

        form.validateFields((err, fieldsValue) => {

            if (err) return;

 

            // 日期

            const rangeTimeValue = fieldsValue['rangtime'] ? fieldsValue['rangtime'] : [];

 

 

            // 单据类型

            let billtypeID = '';

            let billtype = '';

            const arr = fieldsValue['billtypeID'];

            if (arr) {

                if (arr.length == 1) {

                    if (arr[0] == 0) {

                        billtype = 1;

                    }

                    if (arr[0] == 1) {

                        billtype = 2;

                    }

                } else if (arr.length == 2) {

                    billtype = 3;

                }

            }

 

            var values = {

                'starttime': '',

                'endtime': '',

                'customercode': this.state.customerID,

                'commoditycode': fieldsValue['commoditycode'],

                'billcode': fieldsValue['billcode'],

                'searchtype': e.target.value,

                'billtype': billtype,

            };

 

            if (rangeTimeValue.length > 0) {

                values['starttime'] = rangeTimeValue[0].format("Y-M-d");

                values['endtime'] = rangeTimeValue[1].format("Y-M-d");

            }

 

 

            this.props.handleSetState({

                formValues: values,

            })

 

            dispatch({

                type: 'wholeSales/fetch',

                payload: values

            });

        });

 

// 这里的props是为了把值传递给父级,默认进来的时候是选中在第一个上。父级代码如下图:

        this.props.handleSetState({searchtype : e.target.value});

    }

 

 

效果如图:

 

父级的代码效果图:

 

    第二步:在table里面写好三个 table。

 

完成效果图:

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,这里简单给您介绍一下如何用 React 实现一个 Tab 切换的组件。 首先,我们需要创建一个 Tab 组件,它会包含多个 TabItem 子组件,每个子组件代表一个 Tab 标签。我们可以通过 props 传递需要显示的标签和对应的内容。 组件代码如下: ```jsx import React, { useState } from 'react'; function Tab(props) { const [activeIndex, setActiveIndex] = useState(0); const { tabs } = props; return ( <div className="tab"> <div className="tab-header"> {tabs.map((tab, index) => ( <div key={index} className={`tab-item ${index === activeIndex ? 'active' : ''}`} onClick={() => setActiveIndex(index)} > {tab.title} </div> ))} </div> <div className="tab-content"> {tabs[activeIndex].content} </div> </div> ); } export default Tab; ``` 接下来,我们需要在 CSS 定义样式来控制 Tab 的显示效果。这里只给出一个简单的样式,您可以根据自己的需求进行修改。 ```css .tab { border: 1px solid #ccc; border-radius: 5px; overflow: hidden; } .tab-header { display: flex; } .tab-item { flex: 1; padding: 10px; text-align: center; cursor: pointer; } .tab-item.active { background-color: #ccc; } .tab-content { padding: 10px; } ``` 最后,我们可以在父组件使用 Tab 组件,传入需要显示的标签和对应的内容。 ```jsx import React from 'react'; import Tab from './Tab'; function App() { const tabs = [ { title: 'Tab 1', content: 'This is Tab 1 content', }, { title: 'Tab 2', content: 'This is Tab 2 content', }, { title: 'Tab 3', content: 'This is Tab 3 content', }, ]; return ( <div> <Tab tabs={tabs} /> </div> ); } export default App; ``` 这样就完成了一个简单的 Tab 切换组件。希望这能对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值