您好,登錄后才能下訂單哦!
這篇文章主要講解了“react封裝全局彈框的方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“react封裝全局彈框的方法是什么”吧!
彈框效果圖
文件布局
index.js
/* eslint-disable react/no-render-return-value */ import React, { Component } from 'react' import { is, fromJS } from 'immutable' import ReactDOM from 'react-dom' import './alert.less' const close = require('../images/guanbi.png') const line = require('../images/line.png') const defaultState = { alertStatus: false, alertTip: null, alertTitle: '詳情', closeAlert: () => {} } class Toptips extends Component { state = { ...defaultState } // css動(dòng)畫(huà)組件設(shè)置為目標(biāo)組件 FirstChild = props => { const childrenArray = React.Children.toArray(props.children) return childrenArray[0] || null } // 關(guān)閉彈框 confirm = () => { const that = this console.log(that) this.setState( { alertStatus: false }, () => { that.state.closeAlert() } ) } open = data => { const options = data || {} options.alertStatus = true this.setState({ ...defaultState, ...options }) } close = () => { const that = this that.state.closeAlert() this.setState({ ...defaultState }) } shouldComponentUpdate = (nextProps, nextState) => { return ( !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)) ) } render() { const { alertStatus, alertTip, alertTitle } = this.state console.log(alertTip, alertTitle) return ( <div className="alert-con" style={alertStatus ? { display: 'block' } : { display: 'none' }} > <div className="alert-context"> <div className="alert-content-title">{alertTitle}</div> <img className="alert-content-line" src={line} alt="line" /> <div className="alert-content-detail">{alertTip}</div> <img role="presentation" onClick={() => { this.confirm() }} className="alert-close" src={close} alt="關(guān)閉" /> </div> </div> ) } } const div = document.createElement('div') const props = {} document.body.appendChild(div) const Box = ReactDOM.render(React.createElement(Toptips, props), div) export default Box
less
.alert-con { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.3); z-index: 222; } .alert-context { // background-color: #fff; // border-radius: 16px; position: relative; // height: 500px; height: 90%; width: 750px; margin: 40px auto 0; background: url(../images/alertBJ.png) no-repeat center; background-size: 100% 100%; .alert-close{ width: 30px; height: 30px; position: absolute; right: 30px; top: 30px; } .alert-content-title{ width: 100%; height: 80px; line-height: 80px; color: #fff; text-align: center; font-size: 36px; font-weight: bolder; // background: url(../images/line.png) no-repeat left bottom; } .alert-content-line{ width: 100%; height: 20px; margin-top: -44px; margin-left: -6px; } .alert-detais-list{ width: 102%; height: 100%; overflow-y: auto; padding: 20px 60px; .alert-detais-list-C{ p{ &:nth-child(1){ font-size: 14px; line-height: 20px; color: #FFFFFF; letter-spacing: 1.4px; } &:nth-child(2){ line-height: 24px; font-size: 18px; color: #FFFFFF; } } } } .alert-content-detail{ // height: 100%; height: calc(100% - 100px); /* overflow-y: auto; */ overflow: hidden; width: 98%; margin-top: -26px; } .alert-details-pdf{ width: 102%; height: 100%; overflow-y: auto; padding: 20px 60px; .alert-details-button{ display: flex; flex-direction: row; justify-content: flex-end; margin-bottom: 10px; p{ color:#fff; line-height: 35px; font-size: 16px; margin-right: 20px; } a{ line-height: 35px; font-size: 16px; margin-right: 20px; } } } .cameraWrap{ width: 100%; height: 102%; box-sizing: border-box; padding: 12px 4px 0 14px; } }
用法
alertTitle 彈框標(biāo)題
alertTip 彈框內(nèi)容,樣式自己自定義
closeAlert 關(guān)閉時(shí)候返回信息,可要可不要,根據(jù)自己需求。
import Toptips from "./Toptips" Toptips.open({ alertTitle: '批示詳情', alertTip: that.htms(val), closeAlert: function () { console.log("關(guān)閉了..."); } }); htms = val => { return (<div className="alert-detais-list"> <div className="alert-detais-list-C"> <p>批示內(nèi)容:</p> <p>{val.fdTitle}</p> </div> <div className="alert-detais-list-C"> <p>批示詳述:</p> <p>{val.fdTitle}</p> </div> <div className="alert-detais-list-C"> <p>措施及結(jié)果:</p> <p>{val.fdContent}</p> </div> <div className="alert-detais-list-C"> <p>進(jìn)度詳情:</p> <p></p> </div> </div>) }
感謝各位的閱讀,以上就是“react封裝全局彈框的方法是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)react封裝全局彈框的方法是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。