Android WebView 中 React useState 更新失效问题

1. 问题

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

  • 打开文件选择器上传图片后,页面所有 useState 的更新(如 setLoading、setRecordList)都不生效
  • 接口返回数据正常,但页面不渲染
  • 原生 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);
    };
 }
相关推荐
Elcker24 分钟前
YnuoAgent(依诺):一个 npm 包,跑起属于自己的 AI 研发平台
前端·人工智能·npm
计算机魔术师1 小时前
发现2天,修复2个月:AI挖穿PHP后,卡兹克讲透攻防时间差
前端
风骏时光牛马1 小时前
测试标题001
前端
IT_陈寒1 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记2 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
计算机魔术师2 小时前
半年前说不缺钱,半年后150亿美元超募
前端
用户5708462574402 小时前
自动化发布器里最贵的 Bug:返回成功,但什么都没发生
前端
爱吃馒头不吃辣2 小时前
加一道题,改一天代码:题库即数据的降维打击
前端·架构
aiks_yuan2 小时前
Requestly规则使用技巧:前端联调、接口Mock与网络请求调试实战
前端
程序员老赵2 小时前
Docker 部署 MaxKB:轻松搭建企业级智能体平台
前端·docker·agent