我在使用带样式组件的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
的代码我在这里做错了什么?
答案 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} />
}