栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

检测React组件外部的点击

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

检测React组件外部的点击

以下解决方案使用ES6,并遵循最佳实践进行绑定以及通过一种方法设置ref。

Class Implementation::

import React, { Component } from 'react';export default class Outsidealerter extends Component {  constructor(props) {    super(props);    this.setWrapperRef = this.setWrapperRef.bind(this);    this.handleClickOutside = this.handleClickOutside.bind(this);  }  componentDidMount() {    document.addEventListener('mousedown', this.handleClickOutside);  }  componentWillUnmount() {    document.removeEventListener('mousedown', this.handleClickOutside);  }    setWrapperRef(node) {    this.wrapperRef = node;  }    handleClickOutside(event) {    if (this.wrapperRef && !this.wrapperRef.contains(event.target)) {      alert('You clicked outside of me!');    }  }  render() {    return <div ref={this.setWrapperRef}>{this.props.children}</div>;  }}Outsidealerter.propTypes = {  children: PropTypes.element.isRequired,};

Hooks Implementation:

import React, { useRef, useEffect } from "react";function useOutsidealerter(ref) {  useEffect(() => {        function handleClickOutside(event) {      if (ref.current && !ref.current.contains(event.target)) {        alert("You clicked outside of me!");      }    }    // Bind the event listener    document.addEventListener("mousedown", handleClickOutside);    return () => {      // Unbind the event listener on clean up      document.removeEventListener("mousedown", handleClickOutside);    };  }, [ref]);}export default function Outsidealerter(props) {  const wrapperRef = useRef(null);  useOutsidealerter(wrapperRef);  return <div ref={wrapperRef}>{props.children}</div>;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/420664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号