91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react中的modal怎么用

發布時間:2022-04-22 11:57:12 來源:億速云 閱讀:599 作者:iii 欄目:web開發

這篇文章主要介紹了react中的modal怎么用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇react中的modal怎么用文章都會有所收獲,下面我們一起來看看吧。

在react中,modal用于覆蓋包含根視圖的原生視圖,可以實現遮罩的效果,語法為“<Modal visible={this.state.visible} {...props}></Modal>”或者“Modal.confirm()”。

本教程操作環境:Windows10系統、react17.0.1版、Dell G3電腦。

react中modal的用法是什么

Modal 簡述

模態對話框。需要用戶處理事務,又不希望跳轉頁面以致打斷工作流程時,可以使用 Modal 在當前頁面正中打開一個浮層,承載相應的操作。

另外當需要一個簡潔的確認框詢問用戶時,可以使用 Modal.confirm() 等語法糖方法。

核心功能點提取

根據 Antd Modal 文檔提供的接口來實現 Modal.

核心實現

Modal 組件的特殊在于它有兩種用法:

  1. 通常用法:<Modal visible={this.state.visible} {...props}></Modal>

  2. 調用靜態方法: Modal.confirm({ title: '取消后,已編輯的腳本信息將不會保存,請確認是否取消。', okText: '確認取消', cancelText: '暫不取消', onOk() { me.props.onCancel(); } })

我的想法是這兩種調用都在internalModal.tsx中統一維護

react中的modal怎么用
順著這個思路, 對于 Modal.tsx
1)不會維護 render 方法, 而是在 componentDidMount / componentDidUpdate 生命周期中調用 internalModal.tsx 完成渲染
2)Modal.tsx 中維護相關靜態方法 confirm, error, info 等。

// Modal.tsxexport default class Modal extends React.Component<ModalProps, {}> {
    static propTypes = {
		...
    };

    static confirm(content) {
        const modal = new InternalModal();
        const props = {
            ...Modal.defaultProps,
            title: '提示',
            children: content,
            cancelButton: true,
            okButton: true,
            okButtonText: '確定',
            cancelButtonText: '取消',
            closable: false,
            visible: true,
            onOk() {
                modal.destroy();
            },
            onCancel() {
                modal.destroy();
            }
        };
        modal.render(props);
    }

    private modal;
    constructor(props: ModalProps) {
        super(props);
        this.modal = new InternalModal();
    }

    componentWillUnmount() {
        this.modal.destory();
        this.modal = null;
    }

    componentDidMount() {
        this.modal.render(this.props);
    }

    componentDidUpdate() {
        this.modal.render(this.props);
    }

    componentWillReceiveProps(nextProps) {
        if (nextProps.visible) {
            this.modal.show();
        } else {
            this.modal.hide();
        }
    }

    render() {
        return null;
    }}

接下來就是最關鍵的 internalModal.tsx :

export default class InternalModal {

    private props;

    render(props) {
        const {...} = this.props;

        this.createContainer();
        const icon = require('../../assets/icon/info.svg') as string;

        const modalDOM = ...;

        ReactDOM.render({modalDOM}, modalContainer,
	        () => {
	            if (visible) {
	                this.show();
	            }
	        });
    }

	...

    createContainer() {
        if (!modalContainer) {
            modalContainer = document.createElement('p');
            document.body.appendChild(modalContainer);
        }
    }

    destroy() {
        if (modalContainer) {
            ReactDOM.unmountComponentAtNode(modalContainer);
        }
    }

    show() {
        if (modalContainer) {
            modalContainer.style.display = 'block';
        }
    }

    hide() {
        if (modalContainer) {
            modalContainer.style.display = 'none';
        }
    }}

從代碼可以發現 internalModal 的實現要點:

  1. 作為一個普通 js 類 (并沒有繼承 React.Component) ,提供一個 render 方法,render 中通過ReactDOM.render(element, container[, callback])渲染彈出窗口

  2. 在 document 上創建一個 p container 乘放 Modal,通過 css display 控制顯示/隱藏,其實也可以使用 React Portal.

  3. 可以用一些第三方庫比如react-transition-group 來增強 Modal 顯示/隱藏的動畫效果。

關于“react中的modal怎么用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“react中的modal怎么用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宝兴县| 波密县| 湘潭县| 西城区| 客服| 青阳县| 延安市| 张家港市| 富顺县| 满洲里市| 达日县| 明水县| 定安县| 盐山县| 林甸县| 青浦区| 奉化市| 漳浦县| 烟台市| 乐平市| 淮北市| 明光市| 绥中县| 涞源县| 历史| 天柱县| 日照市| 横峰县| 河间市| 武安市| 施甸县| 普兰县| 鹤岗市| 丹棱县| 永春县| 富蕴县| 浠水县| 甘德县| 藁城市| 镇远县| 岗巴县|