我对反应几乎是全新的。我看了留档,看了一些YT的视频。现在我正在尝试将我在网上找到的一些React类组件转换为功能组件。这就是我已经走了多远:我的功能组件(codesandbox)。
它是一个基于用户输入字段使用tspan
元素自动包装SVG文本的组件。
我特别是有一个困难的时间与useEffect挂钩。据我所知,它应该充当componentWillMount
和componentdiddupdate
的等价物。现在我已经完成了几乎所有的设置,但是每当在文本区域中添加新文本时,它都不会更新Text
组件。我相信这是因为我必须在Text
组件中的useffect
挂钩中执行一些操作:
useEffect(() => {
//something so that lines get updated if the user input changes?
}, [lines]);
我尝试过的事情导致了一个无限的循环。请参见:我是否可以在use效应钩子中使用设置状态。
有人能给我指出正确的方向吗?请随意使用代码沙盒:)
在Text
组件中,useffect
函数不跟踪dummyText
属性。尝试将其添加到依赖项数组中,如下所示(Text.jsx,第60行):
useEffect(() => {
const { wordsWithComputedWidth, spaceWidth } = calculateWordWidths();
const lines2 = calculateLines(wordsWithComputedWidth, spaceWidth, 400);
setLines(lines2);
}, [dummyText]);
首先,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安装。在这一点上,没有直接的方法可用来检查其有效性。你在做什么是正确的。
现在有一个按钮,点击这个按钮需要和点击Upload一样的效果,应该怎么实现,antd的版本是4.22.4 upload组件并没有暴露相关的api使用,并且内部也不是使用click来实现的
我正在使用https://react-pdf.org/的react-pdf包创建一个PDF生成器。将react-pdf组件转换为pdf的过程会阻塞主线程,因此我希望在一个单独的工作线程上转换它们。 我正在使用带有worker-loader的create-react-app来识别WebWorker文件。我很难找到将react组件导入Webworker并使用React-PDF提供的pdf(Compon
在花了一些时间学习React之后,我理解了创建组件的两种主要模式之间的差异。 我的问题是什么时候我应该使用哪一个,为什么?一种方法与另一种方法相比有哪些好处/利弊? ES6类: 功能: 我认为只要没有状态可被该组件操纵,就可以正常工作,但就这样吗? 我想如果我使用任何生命周期方法,最好使用基于类的组件。