如何将ref与React类组件和样式化组件一起正确使用?

门德斯

我正在尝试建立一个下拉菜单。基本结构Test是我需要使用Reactref来检测内容区域之外的点击的地方styled-components

我已经检查了SO中的相关文章,但是它们使用了我的类组件不支持的钩子。

这是代码:

import React from "react";
import PropTypes from "prop-types";
import styled, { ThemeProvider } from "styled-components";

import { theme } from "../theme";

import Icon from "../Icon";

const Container = styled.div`
  display: flex;
`};

const SelectorDiv = styled.div`
  background-color: black;
  color: white;
  height: 100px;
`;

class Test extends React.Component {
  componentDidMount () {
    document.addEventListener("mousedown", this.handleClickOutside);
  }

  componentWillUnmount () {
    document.removeEventListener("mousedown", this.handleClickOutside);
  }

  handleClickOutside = event => {
    console.log(this.refs); // undefined
  }


  handleClickInside = () => {
    alert("Clicked inside");
  }

  render = () => {

    return (
      <ThemeProvider theme={theme}>
        <Container disabled={disabled}>
          <SelectorDiv
            onClick={this.handleClickInside}
            ref={"wrapper"}
          >
            <h1>This is the content to click</h1>
          </SelectorDiv>
        </Container>
      </ThemeProvider>
    );
  };
}
export default Test;

裁判不是工作财产。当点击外面的是我得到undefinedthis.refs似乎styled-components有问题,但是在V4上已解决(我正在使用V5.1.0)。

如何将包装器组件放入我的包装盒中handleOutsideClick

zb22

尝试使用ref作为字符串是React较旧API的传统方式。
并且他们不建议使用:

如果您以前使用过React,那么您可能会熟悉一个较旧的API,其中ref属性是一个字符串,例如“ textInput”,并且可以通过this.refs.textInput访问DOM节点。我们不建议这样做,因为字符串引用存在一些问题,被认为是旧问题,并且很可能在将来的发行版中删除。

注意:如果您当前正在使用this.refs.textInput访问引用,则建议您使用回调模式或createRef API。

使用React.createRef()代替,
您可以使用currentref变量的属性访问它,如下所示:




class Test extends React.Component {
  constructor() {
     super(props);
    
     this.selectorRef = React.createRef(null);
  }

  componentDidMount() {
    document.addEventListener("mousedown", this.handleClickOutside);
  }

  componentWillUnmount() {
    document.removeEventListener("mousedown", this.handleClickOutside);
  }

  handleClickOutside = event => {
    console.log(this.selectorRef.current);
  }


  handleClickInside = () => {
    alert("Clicked inside")
  }

  render = () => {

    return (
      <ThemeProvider theme={theme}>
        <Container disabled={disabled}>
          <SelectorDiv
            onClick={this.handleClickInside}
            ref={selectorRef}
          >
            <h1>This is the content to click</h1>
          </SelectorDiv>
        </Container>
      </ThemeProvider>
    );
  };
}
export default Test;

沙盒检查

在功能组件中,您可以使用React钩子 useRef()

参考和Dom
useRef

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Carrot2 API与Java ComponentInitializationException一起使用:无法实例化组件类

来自分类Dev

将event.target与React组件一起使用

来自分类Dev

如何将组件与ng-repeat一起使用?

来自分类Dev

如何将@Input与使用ComponentFactoryResolver创建的组件一起使用?

来自分类Dev

为什么不能将线性渐变与“样式化组件”一起使用?

来自分类Dev

如何将静态NavigationOptions与功能组件一起使用?

来自分类Dev

Theme HOC的样式化组件无法与React.FC类型一起使用

来自分类Dev

即使将forwardRef()与带样式的组件一起使用,也不能给函数组件提供警告refs。

来自分类Dev

Angular 7-如何将一个组件与不同模块一起使用

来自分类Dev

在React中将props与跨组件的样式化组件一起使用

来自分类Dev

如何在React组件中使用样式化组件

来自分类Dev

如何将[(ngModel)]与在组件后初始化的值一起使用

来自分类Dev

如何仅将React与功能组件和挂钩一起使用?

来自分类Dev

将connect和mapDispatchToProps与功能组件一起使用

来自分类Dev

如何在switch语句中将props与样式化组件一起使用

来自分类Dev

如何将withRouter()与通用组件一起使用

来自分类Dev

精巧的Web组件-将类与组件一起导出

来自分类Dev

将react-stripe-js与样式化组件一起使用

来自分类Dev

将Vuex与子组件一起使用的正确方法

来自分类Dev

与具名的导出React类组件一起使用withStyles

来自分类Dev

将样式组件与react js一起使用

来自分类Dev

如何将Bootstrap 3网格系统与表格组件一起使用?

来自分类Dev

如何将朋友类与继承和模板一起使用

来自分类Dev

将Carrot2 API与Java ComponentInitializationException一起使用:无法实例化组件类

来自分类Dev

如何将TSynCompletion和TSynAutoComplete组件与SynEdit for TeX一起使用?

来自分类Dev

如何将组件与ng-repeat一起使用?

来自分类Dev

将jQuery与React组件一起使用

来自分类Dev

将 react-select@2 与样式组件一起使用?

来自分类Dev

如何使用 React 组件类语法声明样式组件

Related 相关文章

  1. 1

    将Carrot2 API与Java ComponentInitializationException一起使用:无法实例化组件类

  2. 2

    将event.target与React组件一起使用

  3. 3

    如何将组件与ng-repeat一起使用?

  4. 4

    如何将@Input与使用ComponentFactoryResolver创建的组件一起使用?

  5. 5

    为什么不能将线性渐变与“样式化组件”一起使用?

  6. 6

    如何将静态NavigationOptions与功能组件一起使用?

  7. 7

    Theme HOC的样式化组件无法与React.FC类型一起使用

  8. 8

    即使将forwardRef()与带样式的组件一起使用,也不能给函数组件提供警告refs。

  9. 9

    Angular 7-如何将一个组件与不同模块一起使用

  10. 10

    在React中将props与跨组件的样式化组件一起使用

  11. 11

    如何在React组件中使用样式化组件

  12. 12

    如何将[(ngModel)]与在组件后初始化的值一起使用

  13. 13

    如何仅将React与功能组件和挂钩一起使用?

  14. 14

    将connect和mapDispatchToProps与功能组件一起使用

  15. 15

    如何在switch语句中将props与样式化组件一起使用

  16. 16

    如何将withRouter()与通用组件一起使用

  17. 17

    精巧的Web组件-将类与组件一起导出

  18. 18

    将react-stripe-js与样式化组件一起使用

  19. 19

    将Vuex与子组件一起使用的正确方法

  20. 20

    与具名的导出React类组件一起使用withStyles

  21. 21

    将样式组件与react js一起使用

  22. 22

    如何将Bootstrap 3网格系统与表格组件一起使用?

  23. 23

    如何将朋友类与继承和模板一起使用

  24. 24

    将Carrot2 API与Java ComponentInitializationException一起使用:无法实例化组件类

  25. 25

    如何将TSynCompletion和TSynAutoComplete组件与SynEdit for TeX一起使用?

  26. 26

    如何将组件与ng-repeat一起使用?

  27. 27

    将jQuery与React组件一起使用

  28. 28

    将 react-select@2 与样式组件一起使用?

  29. 29

    如何使用 React 组件类语法声明样式组件

热门标签

归档