美文网首页
[react]7.1练习

[react]7.1练习

作者: 史记_d5da | 来源:发表于2021-10-31 21:35 被阅读0次

1、实现顶部tab点击效果

App.js

// App.js
import React, { Component } from 'react'
import TabControl from './TabControl'
export default class App extends Component {
    constructor(props) {
        super(props)
        this.titles = ['连休', '高度', '时尚']
        this.state = {
            currentTitle: this.titles[0],
        }
    }
    render() {
        return (
            <div>
                <TabControl itemClick={index => this.itemClick(index)} titles={this.titles} />
                <h2>{this.state.currentTitle}</h2>
            </div>
        )
    }

    itemClick(index) {
        this.setState({
            currentTitle: this.titles[index]
        });
        console.log(index);
    }
}

style.css

.tab-control {
    display: flex;
    height: 44px;
    line-height: 44px;
}

.tab-item {
    flex: 1;
    text-align: center;
}

.tab-item span {
    padding: 5px 8px;
}

.tab-item.active {
    color: red;
}

.tab-item.active span {
    border-bottom: 3px solid red;
}

TabControl.js

// TabControl.js
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import './style.css'

export default class TabControl extends Component {
    constructor(props) {
        super(props)
        this.state = {
            currentIndex: 0
        }
    }
    render() {
        const { titles } = this.props;
        return (
            <div className="tab-control">
                {
                    titles.map((item, index) => {
                        return (
                            <div className={"tab-item" + (this.state.currentIndex === index ? " active" : "")}
                                key={item}
                                onClick={e => this.itemClick(index)}>
                                <span>{item}</span>
                            </div>)
                    })
                }
            </div>
        )
    }

    itemClick(index) {
        this.setState({
            currentIndex: index
        })
        const { itemClick } = this.props;
        if (itemClick) {
            itemClick(index);
        }
    }
}

TabControl.propTypes = {
    titles: PropTypes.array.isRequired,
    itemClick: PropTypes.func
}

2、React-slot

App.js

// App.js
import React, { Component } from 'react'
import NavBar from './NavBar';
import NavBar2 from './NavBar2';

export default class App extends Component {
    render() {
        return (
            <div>
                <NavBar>
                    <span>aaa</span>
                    <div>bbb</div>
                    <a href="/#">ccc</a>
                </NavBar>
                <NavBar2 leftSlot={<span>aaa</span>} centerSlot={<div>bbb</div>} rightSlot={<a href="/#">ccc</a>}/>
            </div>
        )
    }
}

NavBar.js

// NavBar.js
import React, { Component } from 'react'
export default class NavBar extends Component {
    render() {
        return (
            <div className="nav-item nav-bar">
                <div className="nav-left">{this.props.children[0]}</div>
                <div className="nav-item nav-center">{this.props.children[1]}</div>
                <div className="nav-item nav-right">{this.props.children[2]}</div>
            </div>
        )
    }
}

NavBar2.js

// NavBar2.js
import React, { Component } from 'react'
export default class   extends Component {
    render() {
        const {leftSlot, centerSlot, rightSlot} = this.props;
        return (
            <div className="nav-item nav-bar">
                <div className="nav-left">{leftSlot}</div>
                <div className="nav-item nav-center">{centerSlot}</div>
                <div className="nav-item nav-right">{rightSlot}</div>
            </div>
        )
    }
}

style.css

body {
    padding: 0;
    margin: 0;
}
.nav-bar {
    display: flex;
}
.nav-item {
    line-height: 44px;
    text-align: center;
    height: 44px;
}
.nav-left, .nav-right {
    width: 70px;
    background-color: red;
}
.nav-center {
    flex: 1;
    background-color: blue;
}

相关文章

  • [react]7.1练习

    1、实现顶部tab点击效果 App.js style.css TabControl.js 2、React-slot...

  • 使用useSelector useDispatch 替代conn

    前言 随着react hooks越来越火,react-redux也紧随其后发布了7.1(https://react...

  • react-redux@7.1的api,用于hooks

    React-redux 7.1发版啦。 因为在新的项目中用到了hooks,但是用的时候react-redux还处于...

  • 2021遇见绘画|开启喜悦下

    七月遇见绘画灯塔 7.1~7.9号,图一是灯塔哦!可以明显的看到绘画流线更顺畅了,控笔练习也越来越精致哦。 7.1...

  • react练习

    1. 带有自己名字的HelloMessage组件,名字通过props传递。 2. 一个背景色为绿色的盒子,3秒后颜...

  • react练习

    功能 滚动

  • 水彩练习(7.1)雪山

  • Generative Adversarial Networks(

    7 练习 我们包含三个练习来检测大家的理解。而解答在第 8 节给出。 7.1 最优判别器策略 在公式 (8) 中,...

  • [react]4.1、练习

    1、在界面上以表格的形式,显示一些书籍的数据;2、在底部显示书籍的总价格;3、点击+或者-可以增加或减少书籍数量(...

  • 形象描写(非虚构练习7.1)

    在车站候车厅一角的咖啡厅里,身穿白色制服的服务员在围成三角形的吧台里正向着他侧面以为身穿深色西装、头戴圆边帽的男士...

网友评论

      本文标题:[react]7.1练习

      本文链接:https://www.haomeiwen.com/subject/lwvoaltx.html