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

React:如何使用use效果与组件相比?

司寇高峯
2023-03-14

我对反应几乎是全新的。我看了留档,看了一些YT的视频。现在我正在尝试将我在网上找到的一些React类组件转换为功能组件。这就是我已经走了多远:我的功能组件(codesandbox)。

它是一个基于用户输入字段使用tspan元素自动包装SVG文本的组件。

我特别是有一个困难的时间与useEffect挂钩。据我所知,它应该充当componentWillMountcomponentdiddupdate的等价物。现在我已经完成了几乎所有的设置,但是每当在文本区域中添加新文本时,它都不会更新Text组件。我相信这是因为我必须在Text组件中的useffect挂钩中执行一些操作:

  useEffect(() => {
    //something so that lines get updated if the user input changes?
  }, [lines]);

我尝试过的事情导致了一个无限的循环。请参见:我是否可以在use效应钩子中使用设置状态。

有人能给我指出正确的方向吗?请随意使用代码沙盒:)

共有2个答案

洪高扬
2023-03-14

Text组件中,useffect函数不跟踪dummyText属性。尝试将其添加到依赖项数组中,如下所示(Text.jsx,第60行):

  useEffect(() => {
    const { wordsWithComputedWidth, spaceWidth } = calculateWordWidths();
    const lines2 = calculateLines(wordsWithComputedWidth, spaceWidth, 400);
    setLines(lines2);
  }, [dummyText]);
巩枫
2023-03-14

首先,useEffect不像componentWillMount,它的componentDidMount效果在渲染后激发。

其次,在您的特定示例中,您想要的是在DummyText更新时触发一个效果,以便它可以重新计算行。

为此,效果如下所示:

  useEffect(() => {
    //something so that lines get updated if the user input changes?
  }, [dummyText]);

第三,也是最重要的一点,您也不应该这样做,因为实际上不是文本组件的状态-它只是基于dummyText属性的计算值。状态是您的组件所拥有的,它所创建的。您的Text组件没有创建行,它只是根据dummyText属性计算行。

 类似资料:
  • 所以我正在重写一个带有钩子的组件,我遇到了一个有趣的挑战,我需要用钩子模仿的一些旧行为。 我的旧代码如下所示: 你看,我正在基于nextrops启动一个,然后在语句中,我基于该nextVal进行了一些检查,现在,我知道我们可以为指定第二个参数,以便仅在道具更改时运行它,但是这些检查呢,如何实现类似于?

  • 问题内容: 我有一个父React组件,其中包含一个子React组件。 我需要对子组件应用样式,以将其放置在其父组件中,但是其位置取决于父组件的大小。 我在这里不能使用百分比值,因为顶部和左侧位置是孩子和父母的宽度和高度的函数。 React的实现方式是什么? 问题答案: 该问题的答案是使用Refs to Components中描述的ref 。 潜在的问题是需要DOM节点(及其父DOM节点)来正确放置

  • 问题内容: 对React组件和React元素均测试为true。我将如何具体测试对象是React组件?目前,我正在通过测试进行操作,但我希望有更好的方法。 问题答案: 使用npm安装。在这一点上,没有直接的方法可用来检查其有效性。你在做什么是正确的。

  • 我正在使用https://react-pdf.org/的react-pdf包创建一个PDF生成器。将react-pdf组件转换为pdf的过程会阻塞主线程,因此我希望在一个单独的工作线程上转换它们。 我正在使用带有worker-loader的create-react-app来识别WebWorker文件。我很难找到将react组件导入Webworker并使用React-PDF提供的pdf(Compon

  • 在花了一些时间学习React之后,我理解了创建组件的两种主要模式之间的差异。 我的问题是什么时候我应该使用哪一个,为什么?一种方法与另一种方法相比有哪些好处/利弊? ES6类: 功能: 我认为只要没有状态可被该组件操纵,就可以正常工作,但就这样吗? 我想如果我使用任何生命周期方法,最好使用基于类的组件。

  • 问题内容: 我的项目遇到了麻烦。谁能向我解释为什么我不能使用来访问? 下面是我的切入点的代码: 我正在尝试使用该方法访问“ 菜单” 组件中的设置。请参阅下面的 菜单 : 我真的很想知道为什么我可以使用来访问和值。我已经阅读了文档并寻找了其他资源,但是我还没有答案,但是我希望有办法可以做到。 问题答案: method中的第一个参数是包含任何属性和方法的对象,它不引用存在属性的React组件。 如果您