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
相关产品推荐
相关产品推荐

