React TypeError:无法读取未定义的属性“length”
2020-04-07
1891
我正在构建小型 React 应用程序。主要任务是使用 PokeApi 创建有关口袋妖怪的应用程序。当我单击 pokeCard 时,侧边栏上必须显示有关口袋妖怪的主要信息。所以,我想显示口袋妖怪的数量。我们知道,所有数字都以 # 开头。但在 PokeApi 中,口袋妖怪的数量不以 # 开头,也不包含任何 0。例如,Charmander 的数量是 #004,但在 PokeApi 中 Id 是 4。 所以,我用逻辑运算符创建了条件。请看:
{(pokemon.id.length === 1 && <span>#00{pokemon.id}</span>) ||
(pokemon.id.length === 2 && <span>#0{pokemon.id}</span>) ||
(pokemon.id.length === 3 && <span>#{pokemon.id}</span>)}
我希望我创建正确。但是,在我的屏幕上我看到
TypeError: Cannot read property 'length' of undefined
。我想,这是因为,在我点击之前,pokemon.id 是未定义的。我尝试创建
typeof(pokemon.id) == "undefined" && <span>loading</span>
,但是它不起作用。
这是我设置 Pokemon 的代码。
const [SelectedPokemon, setSelectedPokemon] = useState([]);
const fetchPokemonDetails = (pokemonId) => {
fetch(`${API_URL}${pokemonId}`)
.then((result) => result.json())
.then((result) => {
setSelectedPokemon(result);
}, setLoadingForSelectedPokemon(false))
.catch((error) => console.log("Error:", error));
};
你能帮我修复它吗?
3个回答
您尝试在定义之前访问该属性。您可以尝试使用下面的代码片段吗?
{pokemon.id !== undefined ?
(pokemon.id.length === 1 && <span>#00{pokemon.id}</span>) ||
(pokemon.id.length === 2 && <span>#0{pokemon.id}</span>) ||
(pokemon.id.length === 3 && <span>#{pokemon.id}</span>)
: null}
Ajin Kabeer
2020-04-07
您应该确保数据被正确调用。 这是因为您的数据尚未准备好。
代码应该是这样的
{(pokemon && pokemon.id.length === 1 && <span>#00{pokemon.id}
</span>) ||
(pokemon && pokemon.id.length === 2 && <span>#0{pokemon.id}
</span>) ||
( pokemon && pokemon.id.length === 3 && <span>#{pokemon.id}
</span>)}
Moh Jonaidy
2020-04-07
主要问题是您试图在实际定义
pokemon.id
之前使用它。我建议将您的语句放在另一个 if 中,例如:
{ pokemon.id ? this.handleId(pokemon.id) : "" }
其中
handleId = (id) => {
let holder = "#000";
let arr = holder.split("");
id.split("").reverse().map((e, i) => arr[3 - i] = e);
return arr.reduce((a, b) => a + b);
}
我相信这可以解决您的问题,并且
handleId
可以与任意长度的
id
一起使用。
Ceyhun Aslan
2020-04-07