我正在构建一个简单的React应用程序,我使用API来设置状态,我使用Link
进入详细页面,但当我从Link
进入另一个页面并按下返回按钮时,它再次设置状态。但我试图防止再次设置状态,当我从返回按钮返回到页面时。
App.js
function MainPage() {
const [blogs, setBlogs] = useStae([]);
useEffect(() => {
axios.get("/api/blogs/").then((res) => {
setBlogs(res.data.blogs);
}
}
return (
<>
{
blogs.map((res) => <>
<b>{res.title}
// It is showing about 40 blogs.
<Link to={`blog-detail/${res.id}`}>Blog Detail</Link>4
</>
}
</>
)
}
当我点击Blog Detail
并按下Browser
(Chrome)中的按钮时,它再次处于设置状态。
"我尝试过什么"
1.我也曾考虑过Using LocalStorage with Redux Store
,例如:-
const saveToLocalStorage = (state) => {
try {
localStorage.setItem('state', JSON.stringify(state));
} catch (e) {
console.error(e);
}
};
但是数组的长度是40
,那么我认为本地存储中的长度是Would it be efficient to store that big array (40 maybe 100(max))
?
然后我取消了。
1.只使用localStorage,而不使用redux
,但它毕竟是localStorage。
我已经尝试了很多次,但它仍然是设置状态与making请求后端服务器。
任何帮助都将不胜感激。
1条答案
按热度按时间alen0pnh1#
如果您希望
MainPage
组件在每次挂载时都不运行效果,则需要将Lift State Up绑定到一个公共父/祖先组件,该组件在应用的路由器匹配和渲染不同的路由内容/页面/组件时保持挂载状态。您可以将
blogs
状态向上移动到呈现路由的组件,这样数据在挂载时只提取一次,并且在组件的生命周期内有效。不要忘记为useEffect
挂钩包含一个依赖项数组!示例:
...
现在,在路由之间切换/导航将不再触发
useEffect
挂钩来重新获取博客数据。