微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这些功能在模态窗口中不起作用?

如何解决为什么这些功能在模态窗口中不起作用?

当我从模态窗口调用它时,函数调用不起作用。如果您从布局中的模态窗口中取出按钮,则一切正常。

模态窗口本身也起作用(打开、关闭) 当打开时,模态窗口中的“取消”按钮起作用,但这是通过“uk-modal-close”布局类实现的。模态窗口来自 UIkit 库。控制台没有错误

我试图从模态窗口调用其他函数,它们不起作用。

代码

import React,{Component} from 'react';
import UIkit from 'uikit';

export default class Editor extends Component {
    constructor() {
    super();
    }
    render() {
    const modal = true;
    return (
    <>
        <div className='panel'>
            <button className="uk-button uk-button-primary" onClick={() => console.log("Work!")}>Publish</button> //This code works!
            <button className="uk-button uk-button-primary" uk-toggle="target: #modal-save">Save</button>
        </div>
        <div id="modal-save" uk-modal={modal.toString()}>
            <div className="uk-modal-dialog uk-modal-body">
                <h2 className="uk-modal-title">Saving</h2>
                <p className="uk-text-right">
                    <button className="uk-button uk-button-default uk-modal-close" 
                     type="button">Cancel</button>
                    <button className="uk-button uk-button-primary" 
                     onClick={() => this.save()}>Publish</button> //This code doesn`t work!
                </p>
            </div>
        </div>
    </>
 )
}

选项 2

render() {
        const modal = true;
        return (
        <>
            <div className='panel'>
                <button  onClick={() => console.log("Work!")}>Publish</button> //This code works!
                <button  uk-toggle="target: #modal-save">modal</button>  // this is to call a modal window
            </div>
    
            <div id="modal-save" uk-modal={modal.toString()}>
               <button onClick={() => console.log("Work!")}>Publish</button> //This code doesn`t work!
            </div>
        </>
      )
    }

解决方法

这个问题是 react 17 中的事件委托。(https://reactjs.org/blog/2020/10/20/react-v17.html#changes-to-event-delegation)

您将不得不使用门户网站。

创建一个名为 ModalPortal.js 的新文件并将以下代码放入其中:

import React,{ useEffect } from "react";
import ReactDOM from "react-dom";
const ModalPortal = (props) => {
  const modalRoot = document.createElement("div");
  modalRoot.setAttribute("uk-modal","bg-close: false");
  modalRoot.id = "modal-save";

  useEffect(() => {
    document.body.appendChild(modalRoot);
    return () => {
      document.body.removeChild(modalRoot);
    };
  });

  return ReactDOM.createPortal(props.children,modalRoot);
};

export default ModalPortal;

然后在您的主文件中,替换:

<div id="modal-save" uk-modal={modal.toString()}>
    <div className="uk-modal-dialog uk-modal-body">
        <h2 className="uk-modal-title">Saving</h2>
        <p className="uk-text-right">
            <button className="uk-button uk-button-default uk-modal-close" 
             type="button">Cancel</button>
            <button className="uk-button uk-button-primary" 
             onClick={() => this.save()}>Publish</button> //This code doesn`t work!
        </p>
    </div>
</div>

与:

<ModalPortal>
  <div className="uk-modal-dialog uk-modal-body">
    <h2 className="uk-modal-title">Saving</h2>
    <p className="uk-text-right">
      <button
        className="uk-button uk-button-default uk-modal-close"
        type="button"
      >
        Cancel
      </button>
      <button
        className="uk-button uk-button-primary"
        onClick={() => console.log("YES!!")}
        type="button"
      >
        Publish
      </button>{" "}
    </p>
  </div>
</ModalPortal>

工作示例:https://codesandbox.io/s/reverent-microservice-oy4os?file=/src/Editor.js

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?