Android WebView 中 React useState 更新失效问题

1. 问题

在 Android App 内嵌的 H5 页面(React)中:

  • 打开文件选择器上传图片后,页面所有 useState 的更新(如 setLoadingsetRecordList)都不生效
  • 接口返回数据正常,但页面不渲染
  • 原生 DOM 操作正常
  • 使用 Zustand/Redux/Context 管理状态时正常
  • iOS 正常

2. 问题原因

Android WebView 的底层渲染 Bug

  • 触发条件:打开文件选择器(<input type="file">)后返回页面
  • WebView 在 onPause()onResume() 后,渲染引擎进入异常状态
  • 组件内部的 useState 更新被无限期挂起,无法提交到 DOM
  • Context/Redux/Zustand 走的是独立的订阅-通知机制,绕过了这个问题
更新方式 是否失效
useState / useReducer ❌ 失效
Context / Zustand / Redux ✅ 正常
原生 DOM 操作 ✅ 正常

3. 解决方案

将组件本地状态迁移到全局状态管理库

使用 Zustand 示例

javascript 复制代码
import { useEffect, useRef, useState, useContext } from 'react';
import { APP_CONTEXT } from '@/server/store';

export default function App({}) {
  // const [recordList, setRecordList] = useState([]);
   const {
        state: { recordList },
        dispatch,
    } = useContext(APP_CONTEXT);
}
 const getFirstPageData = async () => {
        // 请求第一页数据
        setLoading(true);
        const res = await getGrowthRecordListApi();
        // setRecordList(res.list);
        dispatch({ recordList: res.list });
        setLoading(false);
    };
 }
相关推荐
程序员黑豆13 分钟前
鸿蒙应用开发之跨组件传参:@Provide 与 @Consume 跨层级数据同步详解
前端·harmonyos
C++、Java和Python的菜鸟2 小时前
第9章 后端Web进阶(AOP)
java·开发语言·前端
我星期八休息2 小时前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
AC赳赳老秦3 小时前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
结网的兔子3 小时前
【前端开发】Web端迁移至 uni-app 及鸿蒙扩展方案对比
前端·uni-app·harmonyos
黄泉路醉s3 小时前
在Vant+Vue+TypeScript的H移动前端使用UnoCSS
前端·vue.js·typescript
水瓶夜之3 小时前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
2501_915909063 小时前
iOS 应用反调试技详解术 检测调试器的原理与防护实践
android·ios·小程序·https·uni-app·iphone·webview
Lvan的前端笔记4 小时前
AndroidX 完全入门指南
android·androidx
笨笨狗吞噬者4 小时前
VS Code 内置浏览器打开网页
前端