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

React Native setState赋值对象报错:features.filter未定义

问题解决思路

核心问题

你调用setonToggleArea(getAreaValue)后,状态里存的是包含GeoJSON的嵌套对象(比如{ Line1: 实际GeoJSON }),而非直接的GeoJSON对象。后续代码尝试访问它的features属性时自然找不到,导致undefined is not an object(evaluating 'features.filter')错误。

解决步骤

1. 修正AreaFiltration函数的返回值

确保函数直接返回GeoJSON对象,而非带属性的嵌套结构:

// 错误示例:返回嵌套对象
const AreaFiltration = (selectedKey) => {
  const geoJsonStore = {
    Line1: line1GeoJson,
    madar1: madar1GeoJson
  };
  return { [selectedKey]: geoJsonStore[selectedKey] };
};

// 正确示例:直接返回GeoJSON
const AreaFiltration = (selectedKey) => {
  const geoJsonStore = {
    Line1: line1GeoJson,
    madar1: madar1GeoJson
  };
  return geoJsonStore[selectedKey];
};

2. 若无法修改过滤函数,提取嵌套对象中的GeoJSON

如果AreaFiltration必须返回嵌套结构,更新状态时要手动取出对应的GeoJSON值:

const selectedValue = "Line1"; // 下拉选中的值
const getAreaValue = AreaFiltration(selectedValue);
// 提取嵌套对象里的GeoJSON
const targetGeoJson = getAreaValue[selectedValue];
setonToggleArea(targetGeoJson);

3. 确保初始状态类型一致

初始化onToggleArea时,直接传入Line1对应的GeoJSON对象,而非字符串或其他类型:

const [onToggleArea, setonToggleArea] = useState(line1GeoJson);

4. 增加类型校验避免报错

在使用onToggleArea的地方,先检查是否存在features属性,再执行过滤逻辑:

if (onToggleArea?.features) {
  const filteredFeatures = onToggleArea.features.filter(feature => {
    // 你的过滤逻辑
  });
  // 后续处理
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:10:22