TypeError:无法读取未定义的属性“长度”,API TMDB
2021-01-15
328
我正在使用 TMDB API,它允许我在列表中显示电影。
我有 Add.js 组件,它允许我进行查询和搜索电影并将它们添加到我的列表中
但是我收到此错误:
TypeError: Cannot read property 'length' of undefined
Add.js
import React, { useState } from "react";
import { ResultCard } from "./ResultCard";
export const Add = () => {
const [query, setQuery] = useState("");
const [results, setResults] = useState([]);
const onChange = (e) => {
e.preventDefault();
setQuery(e.target.value);
fetch(
`https://api.themoviedb.org/3/search/movie?api_key=${process.env.REACT_APP_TMDB_KEY}&language=en-US&page=1&include_adult=false&query=${e.target.value}`
)
.then((res) => res.json())
.then((data) => {
if (!data.errors) {
setResults(data.results);
} else {
setResults([]);
}
});
};
return (
<div className="add-page">
<div className="container">
<div className="add-content">
<div className="input-wrapper">
<input
type="text"
placeholder="Search for a movie"
value={query}
onChange={onChange}
/>
</div>
{results.length > 0 && (
<ul className="results">
{results.map((movie) => (
<li key={movie.id}>
<ResultCard movie={movie} />
</li>
))}
</ul>
)}
</div>
</div>
</div>
);
};
2个回答
问题发生在这行代码中:
.then((data) => {
if (!data.errors) { // This is always giving error false since errors property is not returned from API
setResults(data.results);
} else {
setResults([]);
}
});
返回的响应数据为:
{status_code: 7, status_message: "Invalid API key: You must be granted a valid key.", success: false} status_code: 7 status_message: "Invalid API key: You must be granted a valid key." success: false
造成这种情况的原因是因为从 API 返回的
data
没有
errors
属性。
您需要使用
data.success
属性,而不是
data.errors
。
CODESANDBOX 工作代码:
Imran Rafiq Rather
2021-01-15
由于某种原因,
results
未定义。
尝试在获取数据后将结果记录到控制台,也许您将数据设置为未定义或其他。
要快速修复该问题,您可以执行以下操作:
{results?.length > 0 && ( ... )}
HichamELBSI
2021-01-15