You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中Redux Store被覆盖而非合并问题求助

解决Redux Action执行时Store被替换而非更新的问题

嘿,这个问题我太熟了!你遇到的核心问题是在Reducer的每个case里没有合并原有的state,而是直接返回了只包含新字段的对象,导致整个Store被完全替换,只留下你显式声明的那些值。

问题根源

handleActions要求每个处理函数返回的是更新后的完整状态对象,但你现在的写法比如:

DOCUMENT_GET_ALL_PENDING: state => ({ isRefreshing: true, })

这里只返回了isRefreshing: true,完全丢弃了原来state里的其他属性(比如documents、error之类的),自然Store就被替换成这个只有一个字段的对象了。

解决方法:合并原状态与更新字段

你需要用对象扩展运算符(...state)先把原来的state属性都展开,再添加或覆盖需要更新的字段,这样就能保留原有状态的同时更新指定属性。

修正后的Reducer代码示例:

import { handleActions } from 'redux-actions';

export default handleActions({
  DOCUMENT_GET_ALL_PENDING: state => ({ 
    ...state, // 先展开原有所有状态属性
    isRefreshing: true, // 再更新需要修改的字段
  }),
  DOCUMENT_GET_ALL_FULFILLED: (state, action) => ({ 
    ...state,
    isRefreshing: false, // 结束刷新状态
    documents: action.payload, // 更新文档列表
    error: null, // 清空错误信息
  }),
  DOCUMENT_GET_ALL_REJECTED: (state, action) => ({
    ...state,
    isRefreshing: false,
    error: action.payload, // 保存错误信息
  })
}, {
  // 别忘了定义完整的初始状态!确保所有可能的状态字段都有初始值
  isRefreshing: false,
  documents: [],
  error: null
});

关键提醒

  • 每个case处理函数都必须先展开...state,再写要更新的字段,否则都会丢失原有状态。
  • 一定要在handleActions的第二个参数里定义完整的初始状态,避免出现状态字段undefined的情况。

内容的提问来源于stack exchange,提问作者Pieterjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:36:40