美文网首页
react组件插槽 - 实现自己的可扩展的组件

react组件插槽 - 实现自己的可扩展的组件

作者: 小小的开发人员 | 来源:发表于2019-06-04 18:28 被阅读0次

需求
  我们自己写了个组件,引用组件时想要在组件中写入内容,并且写入的内容可以被组件识别、控制,用过Vue的同学肯定会立刻想到slot插槽,react也支持插槽功能,下面我们用react开发一个支持插槽功能的组件。

核心思想
  父组件在子组件中传入的三个div,这三个div会默认通过props传到子组件中,然后我们在子组件中控制children的渲染即可。

<Window display={this.state.display}>
//父组件在子组件中传入的三个div,
<div papa="title">title</div>
<div papa="content">content</div>
<div papa="foot">foot</div>
</Window>

  知道了react的插槽实现方式,我们来实现一个支持插槽的组件。

完成组件Pop

import React from 'react';
import {Fragment, Component} from 'react';
import { connect } from 'react-redux'
import './index.scss'
import { Icon, Button } from 'zent'

class Pop extends Component {

    constructor(props) {
        super(props);
        this.state = {}
        this.renderChild = this.renderChild.bind(this)
    }

    render() {
        return (
            <Fragment>
                <div className="pop-wrap">
                    <div className="pop-header">
                        <span className="left">{this.props.popTitle}</span>
                        <Icon className="right" type="close"/>
                    </div>
                    <div className="pop-content">
                        {Array.isArray(this.props.children) ?
                        this.props.children.map((child) => {
                            return this.renderChild(child)
                        }) : this.props.children && this.renderChild(this.props.children)}
                    </div>
                    <div className="pop-footer">
                        <Button.Group>
                            <Button size="small" className="cancel">取消</Button>
                            <Button size="small" type="primary" className="confirm">确定</Button>
                        </Button.Group>

                    </div>
                </div>
            </Fragment>
        )
    }

    renderChild (child) { // 控制内容的分发
        if (child.props.left) {
            return <div className="left" key="left">{child}</div>
        } else if (child.props.right) {
            return <div className="right" key="right">{child}</div>
        } else if (child.props.center) {
            return <div className="center" key="center">{child}</div>
        }
    }

}


const mapStateToProps = (state) => {
    return {
    }
}
const mapDispatchToProps = (dispatch) => {
    return {}
}

export default connect(mapStateToProps, mapDispatchToProps)(Pop)

Pop的scss文件

.pop-wrap {
  position:absolute;
  left:0;
  top: 0;
  bottom: 0;
  right: 0;
  margin: auto;
  z-index: 2;
  width: 350px;
  height: 300px;
  border: 1px solid #C8C8C8;
  border-radius: 2px;
}

.pop-header {
  height: 40px;
  display: flex;
  align-items: center;
  border-bottom: 1px solid #C8C8C8;
  .left{
    flex: 10;
    margin-left: 10px;
  }
  .right {
    flex: 1;
    margin-right: 10px;
  }
}

.pop-content {
  display: flex;
  height: 220px;
  .left, .right, .center {
    display: flex;
    justify-content: center;
    padding-top: 10px;
  }
  .left,.right {
    flex: 1;
  }
  .center {
    width: 100%;
  }
  .right{
    border-left: 1px solid #C8C8C8;

  }
}

.pop-footer {
  height: 40px;
  display: flex;
  align-items: center;
  border-top: 1px solid #C8C8C8;
  flex-direction: row-reverse;
  .cancel, .confirm{
    margin-right: 10px;
  }
}

引用子组件



相关文章

  • react组件插槽 - 实现自己的可扩展的组件

    需求  我们自己写了个组件,引用组件时想要在组件中写入内容,并且写入的内容可以被组件识别、控制,用过Vue的同学肯...

  • Vue学习笔记[12]-slot插槽和编译作用域

    为了使组件具有更多的扩展性,需要使用插槽,使用插槽的组件应为可复用的组件,若为不复用组件,则不应该使用插槽. 使用...

  • 【前端Vue】05 - [插槽 ,前端模块化开发,webpack

    1. 插槽 1.1 插槽的基本使用 组件的插槽: 组件的插槽也是为了让我们封装的组件更加具有扩展性。 让使用者可以...

  • react中的slot插槽功能

    在vue中当我们封装组件的时候,经常会用到slot插槽功能用来扩展自己组件使其拥有更多场景的适用,但是在react...

  • Flutter 局部路由实现

    Flutter是借鉴React的开发思想实现的,在子组件的插槽上,React有this.props.childre...

  • 插槽-slot

    组件的插槽: (1)组件的插槽是为了让我们封装的组件更加具有扩展性; (2)让使用者可以决定组件内部的一些内容到底...

  • 2-6 vue 匿名插槽-slot

    匿名插槽-slot Slot插槽 —— 实现内容分发 什么是slot?slot的意思是插槽,其目的在于让组件的可扩...

  • 插槽

    插槽能大大提高组件的可复用能力 1.匿名插槽 插槽就是子组件中的提供给父组件使用的一个占位符,用 表示,父组件...

  • 插槽

    ### 认识插槽 插槽:如果局部组件中有使用slot标标签的在父组件内可改变其值 ### 插槽默认值 如果设置插槽...

  • vue 插槽

    插槽语法是Vue实现的内容分发API,用于复合组件开发。 匿名插槽 具名插槽 作用域插槽 将内容分发到子组件指定位置

网友评论

      本文标题:react组件插槽 - 实现自己的可扩展的组件

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