为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 useeffect react hook 在组件卸载时删除事件侦听器 mousedown?

如何使用 useeffect react hook 在组件卸载时删除事件侦听器 mousedown?

蛊毒传说 2022-12-29 14:12:34
我想使用下面的 react usehook 删除组件卸载上的 eventlistener mousedown 是我的代码,function Dialog ({setIsDialogOpen, items}: Props) {const dialogRef = React.useRef<HTMLDivElement>(null);React.useEffect(() => {    const handleClickOutsideDialog = (event: any) => {        if (            dialogRef &&                !dialogRef.contains(event.target)//error here        ) {            alert('You clicked outside of me!');            setIsDialogOpen(false);          }    };    document.addEventListener('mousedown', handleClickOutsideDialog);}, [setIsDialogOpen]);return (    <Wrapper ref={dialogRef}>        <Container_one>            <span>title</span>            <Description> some big description</Description>        </Container_one>        <Container_two>            {items.map(item => (                <div                    key={item.id}                />            ))}        </Container_two>    </Wrapper>);这很好用。但我想使用 usehook 在卸载时删除事件侦听器。我该怎么做 。有人可以帮我解决这个问题吗?谢谢。
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

您removeEventListener()在清理功能中添加。


您可以在文档中找到相关信息。


React.useEffect(() => {

    const handleClickOutsideDialog = (event: any) => {

        if (

            dialogRef &&

                !dialogRef.contains(event.target)//error here

        ) {

            alert('You clicked outside of me!');

            setIsDialogOpen(false);

          }

    };

    document.addEventListener('mousedown', handleClickOutsideDialog);


    return () => { 

        document.removeEventListener('mousedown', handleClickOutsideDialog);

    }

}, [setIsDialogOpen]);


查看完整回答
反对 回复 2022-12-29
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信