当前位置: 首页 > 知识库问答 >
问题:

在React样式组件上使用ref不起作用

赏梓
2023-03-14

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

Edit.js:42未捕获类型错误:此…..包含的不是函数

  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>

我从这个问题中找到了密码

我到底做错了什么?

共有2个答案

路奇
2023-03-14

如果在styledref中扩展另一个组件,则转发需要efford。因此,我的解决方案是将扩展为prop。

之前:

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} />
}

陈昊昊
2023-03-14

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

详细的讨论可以在GitHub上找到

 类似资料:
  • 我在React web上使用样式化组件已经有一段时间了,但最近我开始开发一个React Native应用程序,我决定在中使用样式化的组件。当设计只有属性的组件时,比如默认的components,这是非常好的。 但是,我遇到的问题是,当我需要为具有多个样式属性的更复杂的组件设置样式时,例如、等。 当只有一个样式属性具有不同的名称时,我可以执行以下操作: 这完美无缺,但是当组件具有多种样式时,我不知道

  • Button组件通常由Text元素组成,该元素用TouchableHighlight(或其他touchable)包装。我正在尝试创建一个使用styled-components样式的按钮组件,但是我的样式很难动态响应道具。 下面,我创建了一个按钮组件,类似于样式化组件文档中的Adapting based on props示例。 导入后,我用的按钮是这样的... 所以,我希望我的纽扣看起来像这样...

  • 问题内容: 我想根据角度控制器中函数的返回值设置div的位置 以下内容在FireFox和chrome中可以正常运行,但在Internet Explorer中会被解释为文字字符串值,因此无效 这是问题的示例: 这是一个 小提琴 来演示 有没有人建议如何纠正? 问题答案: 您必须使用ng- style 而不是style,否则某些浏览器会在甚至angular都没有机会渲染它之前删除无效的style属性值

  • 背景: 我正试图找出实现封装React的本机门户实用程序的门户组件的最佳方法。组件只需创建门户的根元素,安全地将其插入DOM,将组件的任何子元素呈现到其中,然后在组件卸载时安全地将其再次从DOM中移除。 问题: React强烈建议避免React安全生命周期方法(componentDidMount、componentDidUpdate等)之外的副作用(如操作DOM)因为这有可能导致问题(内存泄漏、过

  • 我正在使用react-native和styled组件做一个应用程序,我想让文本在图像下可见。我返回的代码是这样的: 我想能够为新狗和{photo.breeds[0].name}{photos.breeds[0].letrich}的点击屏幕设置样式,但我想分别设置它们的样式。 现在我的样式看起来像这样(wisch针对两个文本区域) 有人知道如何编写代码,让它为不同的文本部分创建某种“类名”或其他标识