Day 152/200 React项目,谷歌翻译导致更新数据setState报错

4 篇文章 0 订阅

前言

今儿在研究Jest 被叫去临组帮忙,发现是用Umi写的React+Ts 看着还是有点懵,导致的问题也没见过,最终解决了,总结下解决方案

1、问题

点击谷歌翻译后,点击有数据请求更新页面的事件,页面白屏(或报错)

点击谷歌翻译后,点击没有数据请求的事件, 没报错;

不点击谷歌翻译,没报错;

此外还有控制台的报错如下:

DOMException: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.

Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.

2、分析

  1. 观察页面,在点击谷歌翻译后,页面多了两层嵌套的<font>标签
  2. 打日志,在setState更新数据前后打印日志,发现是在setState时报错的
  3. 分析是因为多了两层<font>导致DOM树有更改,新增的数据,无法用原来的数据挂载上,dispather 数据更改通知时,setState会报错
  4. 也因此有了插入和未挂载的报错;
  5. 没有请求数据,意味着点击之前存的数据不需要更新新的DOM树,所以,没报错

3、解决方案

不要让一块可删改的react元素最外层存在文本节点

用人话说就是在,类似文本显示的地方,都用<span></span>标签包裹起来

原理是:有span标签包裹,即使新增两层<font>标签,依然可以找到span标签的DOM节点来更新数据;

以上

参考链接

小伙伴遇到这个问题说不想干前端了——一次Chrome翻译造成的玄学bug_sido的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中,当使用setState方法时出现TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))错误的原因通常是因为你将一个非迭代对象传递给了setState方法。通常情况下,这是由于在使用useState或useReducer时,将初始状态设置为了一个非迭代对象,例如null、undefined或数字。在你提供的引用中,错误发生在useState的初始化中。 正确的写法是将初始状态设置为一个合适的迭代对象。例如,你可以使用一个空数组作为初始状态: const [age, setAge] = useState([]) 或者,你可以根据你的需求设置初始状态为一个有意义的值,比如一个空对象{}。 根据你提供的代码示例,你可以更改List组件中的useState初始化为正确的形式: const [age, setAge] = useState(18) 这样就能避免报错了。记得在使用useState时,仔细检查初始状态的值,确保它是一个迭代对象,而不是一个非迭代对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [TypeError undefined is not iterable (cannot read property Symbol(Symbol.iterator))](https://blog.csdn.net/m0_59092234/article/details/123431518)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值