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);
    };
 }
相关推荐
奕鼎竜瑆9 小时前
Solid 前端响应式开发从零到精通
前端·人工智能
动恰客流统计9 小时前
景区客流统计怎么做?兼顾管控与运营的实施方案解析
大数据·前端·人工智能
派小心.10 小时前
A/B测试工具免费版够用吗?
前端·数据分析
半摆烂日常10 小时前
低代码平台API对接实践:接口鉴权与数据同步的完整实现
android·低代码·rxjava
前端snow11 小时前
ai agent --- redis 缓存
前端
事圆则缓11 小时前
volatile 使用场景全解析:它能保证什么,又解决不了什么
android
duanshu_11 小时前
官网表单与下载异常怎么排查?五个环节定位故障
前端·自动化·flyweight
Zhou14113612 小时前
SpringBoot_03_Web开发
前端·spring boot·python
辻弋20112 小时前
【无标题】
大数据·服务器·前端·搜索引擎·开源软件
蒲公英内测分发12 小时前
智能投影仪参加海外展会,未上架的 Android 配套 App 怎么让客户限时试用?
android