ADS122U04IPWR+TM4C129ENCPDT工业温度采集系统实战
2026/11/5 9:42:54
不更新 = 触发器没触发 or 被跳过。
| 原因 | 现场代码 | 修复 |
|---|---|---|
| ① 父组件未setState | 父没setState() | 正确触发setState |
| ② 直接改对象/数组 | list.push(item) | setList([...list,item]) |
| ③ 被memo跳过 | React.memo+新引用 | 稳定引用 or 去掉memo |
| ④ 深对象未Immer | obj.a.b=x | immer或展开赋值 |
| ⑤ 被shouldComponentUpdate跳过 | 未实现SCU | 实现SCU or 去掉SCU |
| ⑥ 组件卸载后setState | 异步回调里setState | AbortController取消 |
| ⑦ 条件渲染undefined | if(x)return<A/>无else | return x?<A/>:null |
| 策略 | 渲染次数 | 帧率 | 现象 |
|---|---|---|---|
| 直接改对象 | 200+ | 15fps | 白屏 |
| 正确setState | 5 | 60fps | 精准更新 |
最佳实践:
setUser(produce(draft=>{draft.name='Tom'}))controller.abort()data?.list??[]「props不更新」= 父没setState or 被跳过。」
用「正确setState+Immer+AbortController」三件套,让每一次props都精准更新,永远零白屏!
最后问候亲爱的朋友们,并邀请你们阅读我的全新著作
📚 《 React开发实践:掌握Redux与Hooks应用 》