Javascript TypeError:无法读取属性';地图';从API获取时的未定义值

Javascript TypeError:无法读取属性';地图';从API获取时的未定义值,javascript,reactjs,array.prototype.map,Javascript,Reactjs,Array.prototype.map,我一直在尝试做一个简单的API获取,但我不明白我做错了什么 我读过很多问题,但我真的觉得我错过了一些东西,因为一切似乎都是正确的(显然不是) 感谢您的帮助您应该初始化状态。数据 像这样试试 const [state, set_state] = useState({ status: "idle",data:[] }); 您应该初始化状态。数据 像这样试试 const [state, set_state] = useState({ status: "idle&qu

我一直在尝试做一个简单的API获取,但我不明白我做错了什么 我读过很多问题,但我真的觉得我错过了一些东西,因为一切似乎都是正确的(显然不是)


感谢您的帮助

您应该初始化
状态。数据
像这样试试

 const [state, set_state] = useState({ status: "idle",data:[] });

您应该初始化
状态。数据
像这样试试

 const [state, set_state] = useState({ status: "idle",data:[] });

我刚刚解决了两件事:

  • 定义数据的状态
  • const[state,set_state]=useState({状态:“空闲”,数据:[]})

  • 在迭代之前检查数组

    {state.data && state.data.map((movie) => (
       <ProductCard
         poster={movie.poster}
         title={movie.title}
         year={movie.year}
         type={movie.type}
       />
     ))}
    
    {state.data&&state.data.map((电影)=>(
    ))}
    

  • 我已经创建了一个小演示:搜索尼莫,按下按钮,然后请检查控制台,

    我刚刚解决了几个问题:

  • 定义数据的状态
  • const[state,set_state]=useState({状态:“空闲”,数据:[]})

  • 在迭代之前检查数组

    {state.data && state.data.map((movie) => (
       <ProductCard
         poster={movie.poster}
         title={movie.title}
         year={movie.year}
         type={movie.type}
       />
     ))}
    
    {state.data&&state.data.map((电影)=>(
    ))}
    

  • 我创建了一个小演示:搜索尼莫,按下按钮,请检查控制台,

    我想我知道问题出在哪里了!!! 设置新状态时,它将替换以前的状态。 记住这一点,当您这样设置加载状态时:

    
    设置_状态({状态:“空闲”});
    
    它实际上使您的
    状态.data
    未定义,因此,它抛出异常

    与其重新分配整个状态,不如尝试只替换需要更改的内容:

    set_状态({…状态,状态:“空闲”});
    

    所以,每当你调用set_state方法时,你应该添加你的
    …state
    ,这样你就不会有这个问题了。

    我想我知道问题出在哪里了!!! 设置新状态时,它将替换以前的状态。 记住这一点,当您这样设置加载状态时:

    
    设置_状态({状态:“空闲”});
    
    它实际上使您的
    状态.data
    未定义,因此,它抛出异常

    与其重新分配整个状态,不如尝试只替换需要更改的内容:

    set_状态({…状态,状态:“空闲”});
    

    所以,无论何时调用set_state方法,都应该添加
    …state
    ,这样就不会出现这个问题。

    嘿!谢谢你的回答!我实现了它,但它不起作用:(在
    {state.data.map((movie)=>)中仍然存在相同的错误)(嘿!谢谢你的回答!我实现了它,但它不起作用:(在
    {state.data.map((movie)=>(
    噢,我的天啊,已经修好了!非常感谢!我知道我们在互插之前正在检查阵列,但为什么这是必要的?是因为react“更快”它阻止了API映射未定义的对象?再次感谢,当组件第一次呈现时,API没有命中,但它尝试迭代到
    状态。数据将是未定义的。我们需要在未定义时停止该迭代。:)这就清除了它,非常感谢!所有内容都被选中:)哦,我的天啊!修复了它!非常感谢!我知道我们正在检查阵列,然后再进行互插,但为什么这是必要的?是因为反应“更快”它阻止了API映射未定义的对象?再次感谢,当组件第一次呈现时,API没有命中,但它尝试迭代到
    状态。数据将是未定义的。我们需要在未定义时停止该迭代。:)这就清除了它,非常感谢!所有内容都被选中:)