Javascript 为什么这会产生“错误”;“未定义”;当我告诉它如果不生成消息则生成消息时';不存在?

Javascript 为什么这会产生“错误”;“未定义”;当我告诉它如果不生成消息则生成消息时';不存在?,javascript,reactjs,Javascript,Reactjs,为什么在我按下按钮(没有要搜索的字符串)或多次按下按钮调用函数时会发生此错误 我理解它,因为如果某些参数未定义,它会向控制台生成一个错误,如果它工作,则会显示所有内容 const searchPokemon = () => { api.get(`pokemon/${search}`.toLowerCase()).then((response) => { response == undefined ? console.log("Error

为什么在我按下按钮(没有要搜索的字符串)或多次按下按钮调用函数时会发生此错误

我理解它,因为如果某些参数未定义,它会向控制台生成一个错误,如果它工作,则会显示所有内容

const searchPokemon = () => {
    api.get(`pokemon/${search}`.toLowerCase()).then((response) => {
      response == undefined
        ? console.log("Error")
        : setPokemon({
            name: response.data.name,
            height: response.data.height,
            weight: response.data.weight,
            img: response.data.sprites.front_default,
            id: response.data.id,
            type: response.data.types[0].type.name,
            type2: response.data.types[1]?.type.name,
          });

我怎样才能绕过这个问题来解决它,为什么它的反应不符合我的想法呢?

您只能检查反应是否未定义。但事实上,问题在于,response.data.sprites是未定义的。因此,您应该检查您访问设置口袋妖怪的每个嵌套字段是否未定义。

您可以更改它

const searchPokemon=()=>{
get(`pokemon/${search}`.toLowerCase())。然后((响应)=>{
响应==未定义的控制台.log(“错误”):setPokemon({
名称:response.data.name,
高度:response.data.height,
权重:response.data.weight,
img:response.data.sprites?.front\u默认值,
id:response.data.id,
类型:response.data.types[0].type.name,
type2:response.data.types[1]?.type.name
});
});
}

问题是您试图访问
未定义的
上的
前端\u default
。这意味着
response.data.sprites
未定义的
,但您没有检查它。您只检查
响应
是否为
未定义
。您没有检查
response.data.sprites
。显然
response.data.sprites
在API调用中返回为
undefined
。有了这些小信息,我们无法解释为什么。嘿,迪米特里,谢谢你的回复。如何在setState中检查它,我已经尝试过这个“setPokemon({name:response.data.name,height:response.data.height,weight:response.data.weight,img:response.data.sprites?.front_default,:console.log('error;')),id:response.data.id,type:response.data.types[0].type.name,type2:response.data.types[1]?.type.name,});“但它似乎不起作用。Faith已经回答过了,我怎么能检查每个回复呢。如果精灵未定义,您可以使用可选链接并提供一些默认图像(无图像默认值):setPokemon{…img:response.data.sprites?.front\u default??无图像默认值}