使用' ref'在React Styled Components上无效

时间:2018-06-12 15:22:58

标签: javascript reactjs dom ref styled-components

我在使用带样式组件的ref时遇到困难。当我尝试在下面的类方法中访问它们时,我收到以下错误:

  

Edit.js:42 Uncaught TypeError:这.....包含不是函数

  constructor(props) {
    ....
    this.setWrapperRef = this.setWrapperRef.bind(this);
    this.handleClickOutside = this.handleClickOutside.bind(this);
   }
----------
  setWrapperRef = (node) => {
    this.wrapperRef = node;
  }
  handleEdit = (e) => {
    e.preventDefault();
    this.props.onEdit(this.props.id, this.state.title);
  }
----------
<Wrapper onSubmit={this.handleEdit} ref={this.setWrapperRef}>
  ...
</Wrapper>

我找到了来自this question

的代码

我在这里做错了什么?

2 个答案:

答案 0 :(得分:8)

我自己找到了答案。解决方案是使用innerRef而不是ref,因为ref本身指向样式化组件而不是DOM节点。

详细讨论可在GitHub

上找到

答案 1 :(得分:0)

如果您在样式ref中扩展其他组件,则转发需要efford。因此我的解决方案是使用as属性扩展该组件。

之前:

import { useRef } from 'react'
import styled from 'styled-components'

const Card = styled.div``
const Block = styled(Card)``

const Component = () => {
    const ref = useRef(null);
    return <Card ref={ref} />
}

之后:

import { useRef } from 'react'
import styled from 'styled-components'

const Card = styled.div``
const Block = styled.div``

const Component = () => {
    const ref = useRef(null);
    return <Block as={Card} ref={ref} />
}