【发布时间】:2021-02-03 13:03:53
【问题描述】:
当页面渲染后从服务器加载 SVG 时,我有一种情况,之后我需要向其元素添加某些事件。假设单击矩形后会显示警报。
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>
);
}
但它完全不起作用。只是没有在元素上添加任何事件。因为当它寻找所需的选择器时,它还不存在。
【问题讨论】:
-
您可以尝试
useLayoutEffect而不是useEffect,因为它在 DOM 设置后运行
标签: javascript reactjs frontend