javascript - React:与 componentDidUpdate 相比如何使用 useEffect?
问题描述
我对 React 几乎是全新的。我已阅读文档并观看了一些 YT 视频。现在我正在尝试将我在网上找到的一些React 类组件“转换”为功能组件。这就是我已经走了多远:我的功能组件(codesandbox)。
tspan
它是一个使用基于用户输入字段的元素自动包装 SVG 文本的组件。
我特别难以使用 useEffect 挂钩。据我了解,它应该充当 and 的等价componentWillMount
物componentDidUpdate
。Text
现在我已经完成了几乎所有的设置,但是只要在 textarea 中添加新文本,它就不会更新组件。useEffect
我相信这是因为我必须在组件的钩子中做一些事情Text
:
useEffect(() => {
//something so that lines get updated if the user input changes?
}, [lines]);
我尝试过的事情导致了无限循环。请参阅:我可以在 useEffect 挂钩中使用设置状态吗?
有人能指出我正确的方向吗?随意分叉代码和框:)
解决方案
首先,useEffect 不像 componentWillMount,它是 componentDidMount -在渲染后触发效果。
其次,在您的具体示例中,您想要的是在dummyText更新时触发效果,以便它可以重新计算行。
为此,您的效果如下所示:
useEffect(() => {
//something so that lines get updated if the user input changes?
}, [dummyText]);
第三,也是最重要的,你也不应该这样做,因为lines
它实际上并不是你的Text
组件的状态——它只是一个基于dummyText
prop 的计算值。state 是你的组件拥有的东西,是它创建的东西。您的Text
组件没有创建线条,它只是根据dummyText
道具计算它们。
推荐阅读
- javascript - 如何在 Material UI Select from API 中选择数据?
- javascript - 将日期和时间组合成一个有效的日期时间
- c# - Xamarin.Forms C# 选择器和元组列表不显示任何内容
- javascript - 如何等待除“jQuery.active ==0”之外的所有ajax请求完成?
- python - 如何将特定字母更改为数字?
- flutter - Flutter 的 CupertinoSlidingSegmentedControl 的设计问题?
- javascript - 正则表达式如何匹配精确的字符串模式
- image - 是否可以对图像应用 h.264 压缩?
- python - 设置 plotly Go 折线图范围以排除非营业时间和周末
- r - 条形图 4 个变量