我对react、react native和redux比较陌生,我有一个关于从api获取数据和更新状态的问题。
我想做的是:-每次用户打开屏幕(即POST)时,我都想从api获取数据并更新状态。
因此:-我总是在状态中新获取数据并在屏幕上呈现。
如果我只取数据在组件didMount生命周期方法,那么我不会总是有新鲜的数据。
示例:有两个屏幕Post和Post。如果用户第一次打开posts屏幕,则会触发componentDidMount并获取和呈现POST。然后他转到Post屏幕添加一篇新文章,然后返回Posts屏幕,他将看不到该新文章,因为这些文章将从componentDidMount方法中获取的状态显示。
处理此问题并始终拥有最新数据的最佳方法是什么?
class Posts extends Component {
componentDidMount() {
this.props.fetchPosts();
}
componentDidUpdate(prevProps) {
this.props.fetchPosts();
}
render () { ... }
}
const mapStateToProps = state => {
return {
posts: state.posts.posts,
loading: state.posts.loading,
}
}
const mapDispatchToProps = dispatch => {
return {
fetchPosts: () => dispatch(actions.fetchPosts()),
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Posts)
行动
export const fetchPosts = () => {
return dispatch => {
dispatch(fetchStarted());
apiFetchPosts()
.then(({data}) => {
const posts = data.data;
dispatch(fetched(posts))
})
.catch(error => {
dispatch(fetchFailed(error));
})
}
}
const fetchStarted = () => {
return {
type: actionTypes.POSTS_FETCH_START,
}
}
const fetched = (posts) => {
return {
type: actionTypes.POSTS_FETCH_SUCCESS,
posts,
}
}
const fetchFailed = (error) => {
return {
type: actionTypes.POSTS_FETCH_FAILED,
}
}
您可以使用componentdiddupdate
在您的情况下,您应该发送一个POST
请求以插入新的POST。该请求应将新创建的帖子作为响应。您应该使用该响应来更新处于redux状态的帖子列表。只需将新帖子添加到列表中即可。
删除帖子也是如此,一旦您发送了DELETE
请求,您也应该将该帖子从状态中删除。
如果您想在一段时间内未提取帖子时重新提取帖子,则应实施某种缓存解决方案:
当您第一次获取帖子时,还可以存储请求的时间戳。当用户访问Posts页面时,您可以检查时间戳是否太旧,例如过去的5分钟,并相应地重新蚀刻。
如果您想在用户每次访问该页面时简单地重新回帖,可以使用useEffect挂钩或组合使用componentDidMount
和componentDidUpdate
。
请注意:
您可以在componentDidUpdate()中立即调用setState(),但请注意,必须将其包装在上面示例中的条件中,否则将导致无限循环。来源
我有一个由以下部分组成的项目: Rest API(带Spring) Web仪表板(使用Rest API管理数据) 客户端(获取数据并使用它) 现在我要问自己的是,如何确保客户机在通过web仪表板更新后立即获取新数据?每隔几秒钟抓取一次似乎不是正确的方法,套接字连接是一个好的解决方案吗? 如果你有任何想法,请告诉我,谢谢。
我正在开发一个web应用程序,使用React跟踪水果供应商的库存。js,MongoDB,Node。js和Express。我调用了数据库endpoint来呈现表中的数据。现在,我尝试使用按钮增加和减少库存量,但当我尝试设置新状态时,它不起作用。我尝试通过单击更改状态,然后更新数据库中的新状态。有什么建议吗? > 可结果成分: 从'react'导入Reac,{Component};从“react bo
问题内容: 我在C#/ Visual Studio 2008中使用MySQL。我需要知道任何方法,以便如果一个用户更新数据库,则通过网络通知所有已登录用户已发生更改。如果我通过我的应用程序登录数据库,那时候数据库中最新记录的序列号是10,然后我有特权的人更新了数据库中的记录,同时我收到通知,数据库已更新为新记录。常见的例子可能是MSN Messenger的一个朋友上线时向他发出警报的提示……虽然我
数据预取存储容器 (Data Store) 在服务器端渲染(SSR)期间,我们本质上是在渲染我们应用程序的"快照",所以如果应用程序依赖于一些异步数据,那么在开始渲染过程之前,需要先预取和解析好这些数据。 另一个需要关注的问题是在客户端,在挂载 (mount) 到客户端应用程序之前,需要获取到与服务器端应用程序完全相同的数据 - 否则,客户端应用程序会因为使用与服务器端应用程序不同的状态,然后导致
问题内容: 我处于状态的对象数组: 我需要能够基于id属性搜索items数组,然后更新对象属性。 我可以使用id参数通过数组或在数组上获取对象。 我遇到的麻烦是更新数组,然后更新状态而不会发生突变。 此时,我有一个匹配的对象,可以使用对象传播来更新它的属性: 我的问题是我该如何更新状态,以使其覆盖初始查找操作返回的对象? 问题答案: 您的更新功能如下所示 你这样使用它 毛吧? 如果您继续以这种方式