更新React状态变量触发跨域错误,pywebview对接PythonAPI场景
问题根因
你看到的跨域错误是React开发环境的误导输出,并非真实的跨域请求问题。
pywebview从Python侧返回的数组属于跨上下文宿主对象,和当前JS执行上下文的Array构造函数不属于同一引用,React处理状态更新时无法识别该非原生数组实例,触发未捕获错误。但由于不同上下文的隔离限制,React无法读取错误详情,最终抛出跨域错误的提示。
前置校验
先执行以下代码确认返回值的真实类型,排除控制台打印的视觉误导:
console.log('是否为当前上下文数组:', Array.isArray(response)) console.log('类型标识:', Object.prototype.toString.call(response)) console.log('构造函数是否匹配:', response.constructor === Array)
解决方案
将返回值转换为当前上下文的纯原生数组后再更新状态,任选以下一种方式即可:
- 用
Array.from转换(推荐)
setCourses(Array.from(response))
- 用扩展运算符转换
setCourses([...response])
- 序列化后反序列化(彻底剥离宿主对象属性,兼容所有JSON支持的数据类型)
setCourses(JSON.parse(JSON.stringify(response)))
你之前使用new Array(response)的方式会将整个response作为第一个元素传入新数组,所以会出现多元素合并为单个逗号分隔字符串的问题,该方式不适用当前场景。
内容的提问来源于stack exchange,提问作者flosommerfeld
相关产品推荐
相关产品推荐

