博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react全局的公共组件-------弹框 (Alert)
阅读量:5169 次
发布时间:2019-06-13

本文共 2907 字,大约阅读时间需要 9 分钟。

最近研究react,发现写一个组件很容易,但是要写一个全局的好像有点麻烦。不能像VUE一样,直接在原型上面扩展,注册全局组件

下面实现一个弹框,只需要引入之后,直接调用方法即可,不需要写入组件

给出我写react全局组件的思路。

创建一个 div加入到body,用这个div当容器,渲染react组件,然后由改变组件的 state来控制弹框的显示隐藏

代码结构如下:

效果图如下:

 

 alert.jsx

 

import React, { Component } from 'react';import { is, fromJS } from 'immutable';import ReactDOM from 'react-dom';import ReactCSSTransitionGroup from 'react-addons-css-transition-group';import './alert.css';let defaultState = {  alertStatus:false,  alertTip:"提示",  closeAlert:function(){}}class Alert extends Component{  state = {    ...defaultState  };  // css动画组件设置为目标组件  FirstChild = props => {    const childrenArray = React.Children.toArray(props.children);    return childrenArray[0] || null;  }  // 关闭弹框  confirm = () => {    this.setState({      alertStatus:false    })    this.state.closeAlert();  }  open =(options)=>{    options = options || {};    options.alertStatus = true;    this.setState({      ...defaultState,      ...options    })  }  close(){    this.state.closeAlert();    this.setState({      ...defaultState    })  }  shouldComponentUpdate(nextProps, nextState){    return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))  }    render(){    return (      
{this.state.alertTip}
确认
); }}let div = document.createElement('div');let props = { };document.body.appendChild(div);let Box = ReactDOM.render(React.createElement( Alert, props),div);export default Box;

  

 alert.css

.alert-con {  position: fixed;  top: 0;  left: 0;  width: 100%;  height: 100%;  background: rgba(0, 0, 0, 0.3);  z-index: 11;}.alert-context {  background-color: #fff;  border-radius: 16px;  height: 200px;  width: 80%;  margin: 40% auto 0;}.alert-context .alert-content-detail {  text-align: center;  color: #333;  font-size: 24px;  height: 150px;  line-height: 150px;}.alert-context .comfirm {  border-top: 1PX solid #eee;  box-sizing: border-box;  height: 50px;  line-height: 50px;  text-align: center;  font-size: 20px;  color: #666;}.alert-enter {  opacity: 0;}.alert-enter.alert-enter-active {  transition: all 300ms;  opacity: 1;}.alert-leave {  opacity: 1;}.alert-leave.alert-leave-active {  transition: all 300ms;  opacity: 0;}

  

 使用方式:

import React, { Component } from 'react';import Alert from "../components/alert/alert.jsx";class Two extends Component {	constructor(props){		super(props);		this.state = {			num:1		};	}	open=()=>{		Alert.open({			alertTip:"这是一个测试弹框",			closeAlert:function(){				console.log("关闭了...");			}		});	}  render() {    return (       
Two
{this.state.num}
); }}export default Two;

上面直接引入 alert.jsx之后,调用 open函数即可

 这样的好处,解决了弹框的层级问题,使用更加方便快捷

转载于:https://www.cnblogs.com/muamaker/p/9623425.html

你可能感兴趣的文章
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
有关快速幂取模
查看>>
NOI2018垫底记
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
js编码
查看>>