export enum actionType { updateData = 'updateData',}export const initData = { data: {}}const update = () => { const age = 'xxx' let name = 'xxxx' // 这里模拟异步请求 setTimeout(() => { name = '异步数据' }, 2000) return { age, name, }}export const passengerReducer = (state, action) => { const data = update() switch (action.type) { case actionType.updateData: return { ...state, data, } default: return state }}
// 外部调用dispatch({ type: updateData})
之前name
的更新是同步更新的没有问题现在需要走接口,等接口返回后再更新,我试过在这个文件中调用dispath
但是调用报错,请问下这种异步的数据该怎么更新
这个问题是在问如何在 React Reducer 中异步更新数据。
在 Redux 中,reducer 是一个纯函数,它接收当前的 state 和 action,然后返回新的 state。对于异步操作,我们通常在 action creator 中处理它们,而不是在 reducer 中。这是因为 reducer 必须是同步的,而处理异步操作可能会导致不必要的复杂性和错误。
然而,如果你需要在 reducer 中处理异步操作,可以使用某些中间件(例如 redux-thunk 或 redux-saga),这些中间件可以处理异步操作,并在完成后派发一个 action。
在你的代码中,你试图在 reducer 中模拟一个异步操作(使用 setTimeout)。然而,这不会按预期工作,因为 reducer 必须在每次调用时都返回一个新的状态,而你的代码在等待异步操作完成时不会返回任何新的状态。
正确的做法应该是这样的:
export const fetchData = () => { return async dispatch => { dispatch({ type: actionType.FETCH_DATA_REQUEST }); const data = await fetchDataFromServer(); // 模拟异步请求 dispatch({ type: actionType.FETCH_DATA_SUCCESS, payload: data }); };};
componentDidMount() { this.props.fetchData();}
export default function(state = initData, action) { switch (action.type) { case actionType.FETCH_DATA_REQUEST: return state; // 在数据加载期间,保持当前的 state case actionType.FETCH_DATA_SUCCESS: return { ...state, ...action.payload }; // 用新的数据更新 state default: return state; }}
问题内容: 我有一个带有某些表和视图的PostgreSQL 8.4数据库,这些表和视图本质上是对某些表的联接。我使用的NetBeans 7.2(如描述这里)来从这些观点和表导出并部署那些到Glassfish的3.1.2.2服务器基于REST的服务。 还有另一个过程可以异步更新用于构建视图的某些表中的内容。我可以直接查询视图和表,并查看这些更改已正确发生。但是,从基于REST的服务中提取时,这些值与
我有一个PostgreSQL 8.4数据库,其中有一些表和视图,它们实际上是一些表上的联接。我使用NetBeans7.2(如本文所述)创建基于REST的服务,这些服务派生自这些视图和表,并将它们部署到Glassfish 3.1.2.2服务器上。 还有另一个进程,它异步更新用于构建视图的某些表中的内容。我可以直接查询视图和表,并看到这些更改已经正确发生。但是,当从基于REST的服务中提取时,这些值与
我有一个弹窗想显示5秒后4秒后3秒后2秒后1秒后自动跳转的提示,但是这个秒数怎么更新,就是弹窗一打开就自动倒计时,不用按钮触发
使用React封装的图表组件,如何实现自动更新图表数据?
时间8.31 base深圳 吹爆面试官,体验很好,不过也很开心 面试官先自我介绍,开摄像头,很和蔼 做题,给了一个叉叉图标,问不用图片可以怎么实现(脑子懵了,答了svg和canvas绘制,不知道想考什么) 做题,try catch块里的输出 项目拷打,lz主要聊了webworker和大文件上传,面试官会边听边记录重点,面试官会问需求和根据重点细节探讨,20min Vue3相对Vue2的最大的改进
可能你还没有注意到,Vue异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部尝试对异步队列使用原生的P