【发布时间】:2019-08-07 06:16:31
【问题描述】:
我的 react 函数组件不断地重新渲染自己,直到浏览器崩溃。
我能找到的唯一解决方案是在 useEffect() 的末尾输入带有我的常量的 []。
function getNestedObject(nestedObj, pathArr) {
return pathArr.reduce(
(obj, key) => (obj && obj[key] !== "undefined" ? obj[key] : undefined),
nestedObj
);
}
function Genres() {
const [genreList, setgenreList] = useState(0);
useEffect(() => {
let results = "";
axios({
url: "https://api.themoviedb.org/3/genre/movie/list?",
method: "GET",
responseType: "json",
params: {
api_key: "00000000000",
language: "en-US"
}
}).then(result => (results = result.data.genres));
let a = [];
for (let i = 0; i < 10; i++) {
let name = getNestedObject(results, [i, "name"]);
a.push(name);
}
setgenreList(a);
console.log(genreList);
}, [genreList]);
return <div>test</div>;
}
我也试过没有useEffect,它给出了相同的循环结果。
我在渲染中有<Genres />。
【问题讨论】:
-
results 将是你的 for 循环中的一个空字符串,因为 axios 响应还没有返回,它会抛出任何错误吗? :) 所以它会返回
undefined作为名字,你的 a 将包含 10 次 -
是的,我可以修复的 axios get,它目前在 console.log 中打印出空数组。但我的问题是它不断地重新渲染 :(
-
尝试一个空数组作为第二个参数?
-
你能说明你在哪里使用这个组件吗?
-
您是否只希望它在组件安装时运行一次?如果是这样,您需要将第二个参数传递给
useEffect(),它应该是一个空数组[]。
标签: javascript reactjs react-hooks