Reactjs React can';我不明白为什么我得到了太多的重新渲染错误
这个问题已经被问了很多次,但每个案例都是独一无二的。因此,我无法在代码中找到导致错误的原因。它看起来与return语句中的三元数有关,但我不明白出了什么问题Reactjs React can';我不明白为什么我得到了太多的重新渲染错误,reactjs,Reactjs,这个问题已经被问了很多次,但每个案例都是独一无二的。因此,我无法在代码中找到导致错误的原因。它看起来与return语句中的三元数有关,但我不明白出了什么问题 const Results = () => { const [favorites, setFavorites] = useState({}); const [loading, setLoading] = useState(true); const [summoner, setSummoner] = useState(&qu
const Results = () => {
const [favorites, setFavorites] = useState({});
const [loading, setLoading] = useState(true);
const [summoner, setSummoner] = useState("");
const location = useLocation();
try {
setSummoner(location.state.params);
} catch (err) {
console.log(err);
}
useEffect(() => {
(async () => {
await fetch(
"...",
{
method: "POST",
body: summoner,
}
)
.then((res) => res.json())
.then((favs) => setFavorites(favs));
setLoading(false);
})();
}, []);
return summoner.length > 0 ? (
<div>
<Navbar />
<Loader>
<LoaderPosition>
<DotLoader color={"white"} size={250} loading={loading} />
</LoaderPosition>
</Loader>
<Favorites>
<Title>Favorite Champions of {summoner}</Title>
{Object.entries(favorites).map((entry) => (
<Card key={entry[1].name} data={entry[1]} />
))}
</Favorites>
</div>
) : (
<Search />
);
};
export default Results;
const Results=()=>{
const[favorites,setFavorites]=useState({});
const[loading,setLoading]=useState(true);
const[召集人,集合汇总人]=使用状态(“”);
const location=useLocation();
试一试{
setSummoner(location.state.params);
}捕捉(错误){
控制台日志(err);
}
useffect(()=>{
(异步()=>{
待命(
"...",
{
方法:“张贴”,
身体:召唤者,
}
)
.然后((res)=>res.json())
然后((favs)=>setFavorites(favs));
设置加载(假);
})();
}, []);
返回召唤器。长度>0(
最受欢迎的{召唤者}冠军
{Object.entries(收藏夹).map((条目)=>(
))}
) : (
);
};
导出默认结果;
基本上,我想做的是通过更改地址栏的URL来防止转到/results
。因为如果搜索页面未发送所需参数,则会抛出错误。这是您的问题:
try {
setSummoner(location.state.params);
} catch (err) {
console.log(err);
}
如果没有捕捉到错误,则会反复设置Summoner。每个集合都会重新呈现组件,因此最终会出现一个无休止的循环。在组件范围内,您不能执行
setSummoner
,必须在useffect或某个函数调用中调用它。否则,每次更新组件时,它都会被调用,并且会进入无限循环。