美文网首页React Native开发
运用react插槽,自定义Madal插件

运用react插槽,自定义Madal插件

作者: SHiny_Jun | 来源:发表于2019-11-30 18:24 被阅读0次

手摸手写一个Modal插件

首先封装一个组件modal,其中各个参数的作用在上面都进行了解析


image

主角组件

modal.js

import { Fragment, Component } from 'react';
import c from './index.less';

/*
 * @visible {Boolean} 是否展示
 * @closeName {String} 取消键名字
 * @okName {String} 确认键名字
 * @buttonable {Boolean} 底部按钮是否隐藏
 * @cancelable {Boolean} 取消按钮是否隐藏
 * @closeable {Boolean} x按钮是否隐藏
 * @onOk {Function} 确认键回调函数
 * @onCancel {Function} 取消键和x按钮回调函数
 */
export default class Modal extends Component {
  constructor() {
    //继承React.Component
    super();
    this.state = {};
  }

  render() {
    const { closeName, okName, buttonable, closeable, cancelable, onOk, onCancel, visible } = this.props;
    return (
        visible && (
          <div className={c.index}>
            <div className={c.window}>
              {!closeable && (
                <div className={c.close} onClick={e => { onCancel && onCancel(e);}}>×</div>
              )}
              <div className={c.content}>{this.props.children}</div>
              {!buttonable && (
                <div className={c.footerBtn}>
                  <div className={c.btns}>
                    {!cancelable && (
                      <div className={c.cancle} onClick={e => { onCancel && onCancel(e); }}>{closeName || '取消'}</div>
                    )}
                    <div className={c.ok} onClick={e => { onOk && onOk(e); }}>{okName || '确认'}</div>
                  </div>
                </div>
              )}
            </div>
          </div>
        )
    );
  }
}

首先封装一个组件modal,以下放一下样式代码,大家可以根据自己需要修改。
index.less

.index{
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(0, 0, 0, 0.5);
  .content{
    overflow: hidden;
  }
  .window{
    margin: auto;
    top: 50%;
    transform: translateY(-50%);
    position: relative;
    width: 534px;
    min-height: 300px;
    background-color: #fff;
    border-radius:15px;
    .close{
      position: absolute;
      top: 10px;
      right: 20px;
      font-size: 50px;
      color: #bbbbbb;
    }
    .footerBtn{
      padding-top: 100px;
      .btns{
        font-size: 30px;
        position: absolute;
        display: flex;
        width: 100%;
        height: 100px;
        line-height: 100px;
        bottom: 0;
        border-top: 1px solid #eeeeee;
        >div{
          flex: 1;
          text-align: center;
          border-left: 1px solid #eeeeee;
          &:first-child{
            border-left: none;
          }
        }
      }
    }
  }
}

如何运用组件?

先引入modal.js直接写入<modal>标签,里面的内容直接写入自己定义的样式就可以了
index.js

import Modal from '../Modal';

export default class GetCheck extends Component {
  constructor() {
    super();
    this.state = {
      show: true,
    };
  }
  close = e => {
      this.setState({show : !this.state.show})
  }
  render() {
    return (
      <Modal visible={this.state.show} buttonable={true} onCancel={this.close}>
        <div className={c.title}>Hello World!</div>
      </Modal>
    );
  }
}

下面做一个小小的扩展

通过自定义一个name去选择不同节点插入组价不同地方
index.js修改标签里面的节点

<Modal visible={this.state.show} buttonable={false} onCancel={this.close}>
     <div name="first">Hello World!</div>
     <div name="second">Hello World!</div>
 </Modal>

在组件的引用有3种方法,子组件一定要使用this.props.children才能使用
如在Modal.js里面运用

{this.props.children}//这是一个数组 会直接把三个div直接显示在子组件中
{this.props.children[0]}//只是把这个children数组第一个元素放到子组件中
{this.props.children.filter(itme => itme.props.name=="first")}//这是通过filter筛选出指定自定义属性的名称来放入到子组件中

结束,如果对你有帮助希望各位小哥哥可以点赞噢!
!

相关文章

  • 运用react插槽,自定义Madal插件

    手摸手写一个Modal插件 首先封装一个组件modal,其中各个参数的作用在上面都进行了解析 主角组件 modal...

  • React配置过程中用到的插件汇总

    ●react插件●react-dom插件●react-router插件●react-redux插件●babel插件...

  • vue插槽的用法

    插槽的作用:可以让用户在组件标签中自定义内容 # 插槽 ## 普通插槽 ```javascript const c...

  • 【Vue8】插槽

    插槽很重要!插件和模块中会经常使用插槽。 插槽的使用场景 即什么时候使用插槽?比如说这样: 我是插槽slot 父组...

  • react-native 自定义简单日历组件

    react-native 自定义简单日历组件 先yarn add moment 只依赖这个日期处理插件

  • react 第十一章 react props的children属

    react 里面的children 相当于vue里面的插槽、、

  • # Portals

    插槽:将一个react元素渲染到指定的DOM容器中 ReactDOM.createPortal(React 元素,...

  • Vue: slot实现动态列表

    使用插槽前需要掌握Vue自定义组件的基础,插槽应用于自定义模板中,用于构建子模版,最形象的例子就是 列表标题(父模...

  • Flutter 局部路由实现

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

  • react工具

    react开发插件 React Developer Tools 。redux开发插件:Redux DevTools...

网友评论

    本文标题:运用react插槽,自定义Madal插件

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