首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在页面呈现反应之后添加事件

在页面呈现反应之后添加事件
EN

Stack Overflow用户
提问于 2021-02-03 21:03:53
回答 1查看 36关注 0票数 2

在页面呈现之后,我遇到了从服务器加载SVG的情况,之后,我需要将某些事件添加到它的元素中。假设在点击一个rect之后,它会显示一个警告。

代码语言:javascript
复制
import React, { useEffect, useState } from 'react';
import css from "./room-plan.module.css";
import { Button } from "../../components";

export default function RoomPlan({ svg }) {

  useEffect(() => {
    var elements = Array.from(document.querySelectorAll('svg rect'));

    elements.forEach(function(el) {
      el.addEventListener("click", alert("hello"));
   })
  }, [])

  
  return (
      <div>
        <h2 className={css.labels}>Select desk</h2>
          <div id={css.roomPlan} dangerouslySetInnerHTML={{__html: svg, }}></div>
        <div className={css.bookingButtons}>
          <Button>CANCEL</Button>
          <Button>BOOK DESK</Button>
        </div>
      </div>
  );
}

但它完全不起作用。只是不会在元素上添加任何事件。因为当它查找所需的选择器时,它还不存在。

EN

回答 1

Stack Overflow用户

发布于 2021-02-03 21:43:09

上面的答案是正确的,但请确保在组件卸载过程中包含用于清理的return function inside the useEffect

代码语言:javascript
复制
useEffect(() => {
    var elements = Array.from(document.querySelectorAll('svg rect'));
    const listener = () => alert("hello");
    
    if(elements) {
       elements.forEach(function(el) {
          el.addEventListener("click", listener);
       })
    }

     return function cleanup(){
        if(elements) {
           elements.forEach(function(el) {
              el.removeEventListener("click", listener);
            })
        }
     }
         
},[])

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66028145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档