Javascript TypeError:无法读取属性';地图';从API获取时的未定义值
我一直在尝试做一个简单的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
感谢您的帮助您应该初始化
状态。数据
像这样试试
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没有命中,但它尝试迭代到状态。数据将是未定义的。我们需要在未定义时停止该迭代。:)这就清除了它,非常感谢!所有内容都被选中:)