You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native调用OpenAI Assistant遇只读属性错误,无法展示结果

解决React Native中调用OpenAI Assistant函数更新useState时的"Cannot assign to property 'search' which has only a getter"错误

可能原因

  • 函数返回的响应对象包含名为search的只读属性,你在更新状态时直接赋值了整个对象,或处理响应时意外修改了这个只读属性。
  • React Native与Node.js(ts-node)的对象属性处理逻辑有差异,导致Node环境下不会触发的只读属性赋值操作,在React Native里抛出错误。

解决方案

1. 提取纯文本内容更新状态

既然ts-node中能正常返回响应字符串,说明函数返回的内容里包含可用的文本。直接提取文本部分,避免携带只读属性:

const fetchResponse = async () => {
  const response = await queryNoFileSearch(你的查询内容);
  // 提取需要的文本,兼容字符串或对象格式的返回值
  const resultText = typeof response === 'string' ? response : response.content;
  set你的状态变量(resultText);
};

2. 深拷贝响应对象剥离只读属性

如果需要保留对象结构,通过序列化/反序列化深拷贝,移除只读属性限制:

const fetchResponse = async () => {
  const response = await queryNoFileSearch(你的查询内容);
  const mutableResponse = JSON.parse(JSON.stringify(response));
  set你的状态变量(mutableResponse);
};

3. 排查函数内部的属性修改操作

检查queryNoFileSearch函数内部,是否存在直接修改响应对象search属性的代码。如果有,改成创建新对象的方式:

// 错误写法:直接修改只读属性
response.search = '自定义内容';

// 正确写法:生成新对象
const newResponse = { ...response, search: '自定义内容' };

验证步骤

  • 在组件中调用函数前,先console.log响应内容,确认是否包含search只读属性。
  • 先尝试只更新纯文本到状态,看错误是否消失。

内容的提问来源于stack exchange,提问作者user985216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:54:58