react实现tab切换

2021-01-29  本文已影响0人  friendshi洛初Udo邭

鉴于看了网上都不少文章都没有完整的描述完一个demo,个人借助react实现了一个供大家参考下。


parents.js组件

import React from 'react';

import './BehaviorListModal.scss';

import Title from './component/Title'

import Content from './component/Content'

class BehaviorListModal extends React.Component {

    constructor(props) {

        super(props);

        this.state = {

            list: [

                {

                    id: 505,

                    content: `<p>作为开发者,我们经常都会使用各种优秀的开源库;与此同时,我们也可能是库的提供者,不管是我们提供给公司内部使用的库,亦或是个人主导或参与的各种开源项目。一个优秀的库固然有很多的的特质,在日常的开发中,我们也自然会遇到一些不是那么开发体验友好的库。

                    作为 Java 开发者,我个人体感最强的是运行时的 LinkageError 。每遇到这样的问题,我就需要检查包的依赖,结合 MavenHelper 做各种升级、排包、继续测试等工作。而这一问题的根源则是因为“二进制不兼容性”。本文将结合开源项目中的一些好的实践,以及个人的开发经验和大家做一点分享,抛砖引玉。

                    作为开发者,我们经常都会使用各种优秀的开源库;与此同时,我们也可能是库的提供者,不管是我们提供给公司内部使用的库,亦或是个人主导或参与的各种开源项目。一个优秀的库固然有很多的的特质,在日常的开发中,我们也自然会遇到一些不是那么开发体验友好的库。作为 Java 开发者,

                    我个人体感最强的是运行时的 LinkageError 。每遇到这样的问题,我就需要检查包的依赖,结合 MavenHelper 做各种升级、排包、继续测试等工作。而这一问题的根源则是因为“二进制不兼容性”。本文将结合开源项目中的一些好的实践,以及个人的开发经验和大家做一点分享,抛砖引玉。作为开发者,

                    我们经常都会使用各种优秀的开源库;与此同时,我们也可能是库的提供者,不管是我们提供给公司内部使用的库,亦或是个人主导或参与的各种开源项目。

                    一个优秀的库固然有很多的的特质,在日常的开发中,我们也自然会遇到一些不是那么开发体验友好的库。作为 Java 开发者,我个人体感最强的是运行时的 LinkageError 。每遇到这样的问题,我就需要检查包的依赖,结合 MavenHelper 做各种升级、排包、继续测试等工作。而这一问题的根源则是因为“二进制不兼容性”。

                    本文将结合开源项目中的一些好的实践,以及个人的开发经验和大家做一点分享,抛砖引玉。作为开发者,我们经常都会使用各种优秀的开源库;与此同时,我们也可能是库的提供者,不管是我们提供给公司内部使用的库,亦或是个人主导或参与的各种开源项目。一个优秀的库固然有很多的的特质,在日常的开发中,我们也自然会遇到一些不是那么开发体验友好的库。

                    作为 Java 开发者,我个人体感最强的是运行时的 LinkageError 。每遇到这样的问题,我就需要检查包的依赖,结合 MavenHelper 做各种升级、排包、继续测试等工作。而这一问题的根源则是因为“二进制不兼容性”。本文将结合开源项目中的一些好的实践,以及个人的开发经验和大家做一点分享,抛砖引玉。作为开发者,我们经常都会使用各种优秀的开源库;

                    与此同时,我们也可能是库的提供者,不管是我们提供给公司内部使用的库,亦或是个人主导或参与的各种开源项目。一个优秀的库固然有很多的的特质,在日常的开发中,我们也自然会遇到一些不是那么开发体验友好的库。作为 Java 开发者,我个人体感最强的是运行时的 LinkageError 。每遇到这样的问题,我就需要检查包的依赖,

                    结合 MavenHelper 做各种升级、排包、继续测试等工作。而这一问题的根源则是因为“二进制不兼容性”。本文将结合开源项目中的一些好的实践,以及个人的开发经验和大家做一点分享,抛砖引玉。作为开发者,我们经常都会使用各种优秀的开源库;与此同时,我们也可能是库的提供者,不管是我们提供给公司内部使用的库,亦或是个人主导或参与的各种开源项目。

                    一个优秀的库固然有很多的的特质,在日常的开发中,我们也自然会遇到一些不是那么开发体验友好的库。作为 Java 开发者,我个人体感最强的是运行时的 LinkageError 。每遇到这样的问题,我就需要检查包的依赖,结合 MavenHelper 做各种升级、排包、继续测试等工作。而这一问题的根源则是因为“二进制不兼容性”。本文将结合开源项目中的一些好的实践,以及个人的开发经验和大家做一点分享,抛砖引玉。</p>`,

                    showStartTime: 1611220252000,

                    createdAt: 1611220252000,

                    title: "<p style='color:red'>八大红线八大红线八大红线八大红线</p>",

                    noticeRecordId: 459248,

                    readStatus: 1,

                    urgent: 1,

                    stick: 1,

                    tag: 1,

                    tagName: "薪资补贴",

                },

                {

                    id:504,

                    content: "<p>115</p>",

                    showStartTime: 1611220189000,

                    createdAt: 1611220189000,

                    title: "<p style='color:red'>八大红线八大红线</p>",

                    noticeRecordId: 459249,

                    readStatus: 1,

                    urgent: 1,

                    stick: 1,

                    tag: 1,

                    tagName: "薪资补贴"

                },

                {

                    id:504,

                    content: "<p>115</p>",

                    showStartTime: 1611220189000,

                    createdAt: 1611220189000,

                    title: "<p style='color:red'>115</p>",

                    noticeRecordId: 459249,

                    readStatus: 1,

                    urgent: 1,

                    stick: 1,

                    tag: 1,

                    tagName: "薪资补贴"

                },

                {

                    id:504,

                    content: "<p>115</p>",

                    showStartTime: 1611220189000,

                    createdAt: 1611220189000,

                    title: "<p style='color:red'>115</p>",

                    noticeRecordId: 459249,

                    readStatus: 1,

                    urgent: 1,

                    stick: 1,

                    tag: 1,

                    tagName: "薪资补贴"

                },

                {

                    id:504,

                    content: "<p>115</p>",

                    showStartTime: 1611220189000,

                    createdAt: 1611220189000,

                    title: "<p style='color:red'>115</p>",

                    noticeRecordId: 459249,

                    readStatus: 1,

                    urgent: 1,

                    stick: 1,

                    tag: 1,

                    tagName: "薪资补贴"

                },

                {

                    id:504,

                    content: "<p>115</p>",

                    showStartTime: 1611220189000,

                    createdAt: 1611220189000,

                    title: "<p style='color:red'>115</p>",

                    noticeRecordId: 459249,

                    readStatus: 1,

                    urgent: 1,

                    stick: 1,

                    tag: 1,

                    tagName: "薪资补贴"

                },{

                    id:504,

                    content: "<p>11521321</p>",

                    showStartTime: 1611220189000,

                    createdAt: 1611220189000,

                    title: "<p style='color:red'>115</p>",

                    noticeRecordId: 459249,

                    readStatus: 1,

                    urgent: 1,

                    stick: 1,

                    tag: 1,

                    tagName: "薪资补贴"

                }

            ],

            active: ''

        };

    }

    handleActive = index => {

        this.setState({

            active: index

        });

    };

    render() {

        const { list, active } = this.state;

        return (

            <div className="teacherListBehavior">

                <div className="title">

                    <span>讲师行为规范</span>

                </div>

                <div className="container">

                    <div className="noticeList">

                        <div className="col">

                            <Title 

                                list={list}

                                active={active}

                                callback={this.handleActive.bind(this)}

                            />

                        </div>

                        <div className="col">

                            <Content

                                list={list}

                                active={active}

                            />

                        </div>

                    </div>

                </div>

            </div>

        );

    }

}

export default BehaviorListModal;

两个子组件,一个title.js和一个comtent.js

import React from 'react'

import './Title.scss';

function Title(props) {

    const { list, active } = props

    const bgChange = index => {

        props.callback(index)

    };

    const textFilter = val => {

        if (val.length <= 8) {

            return val    

        } else {

            return val.substring(0, 8) + '...'

        }

     }

    return (

            <div className="behavior-title">

                {list.map((value, index) => {

                        const liClass = active === index ? 'active' : '';

                        return (

                            <div

                                className={`left-li ${liClass}`}

                                key={index}

                                onClick={() => {

                                    bgChange(index);

                                }}

                            >

                                {textFilter(value.title.replace(/<\/?[^>]*>/g,''))}

                            </div>

                        );

                })}    

            </div>

    )

}

export default Title

import React from 'react'

import './Content.scss';

function Content(props) {

    const { list, active } = props

    return (

            <div className="contents">

                {list.map((value, index) => {

                        const liShow = active === index ? 'show' : 'notShow';

                        return (

                            <div

                                className={`${liShow}`}

                                key={index}

                            >

                                {value.content.replace(/<\/?[^>]*>/g,'')}

                            </div>

                        );

                })}    

            </div>

    )

}

export default Content

css部分 title.scss和content.scss

title.scss

.behavior-title{

    font-size: 14px;

    font-family: PingFangSC-Semibold, PingFang SC;

    font-weight: 400;

    color: #333333;

    letter-spacing:1.5px;

    .left-li{

        height:56px;

        line-height: 56px;

        padding: 0px 0px 0px 20px;

    }

    .active{

        border-left: 3px solid #F32735;

        color: #EF4C4F;

        font-weight: 600;

    }

}

content.scss部分

.contents{

    text-indent:25px;

    .show{

        display: block;

    }

    .notShow{

        display: none;

    }

}

上一篇 下一篇

猜你喜欢

热点阅读