Dispatch时意外改变不需改变的state

#前言

使用Redux时候,突然很意外的发现一个严重的问题。现在我有两个组件,他们的state都寄托于store但是相互之间的state是解耦的互不影响。当我在其中一个组件dispatch一个action的时候,很意外的改变了另外一个组件的state。匪夷所思,前前后后检查了几遍action,reducer,store还是没有发现问题。原文@WEID

#Debug

于子夜,身于睡榻,苦思难眠。忽,地动山摇,山海倒腾。远处似有光微动。近身,只见岩壁有些许字符,苍劲有力,笔走龙蛇,颇有汉唐之遗风,书:

“当dispatch一个action的时候,action会传递给每一个reducer”

读至此处,忽,醍醐灌顶,茅塞顿开。

#解决

当我们dispatch的时候,其实每一个reducer都会收到这个action。当reducer找不到目标的action时,reducer就会走default。所以,这时候default返回的state应该为,当前的state而非初始化的state。

let initState = {
 favorite: false
 };
 const favoriteStatusReducer = (state=initState,action) =>{
 	switch (action.type) {
 		case 'FAVORITE_STATUS_ON':
 			return Object.assign({},state,{
 				favorite: true,
 			});
 		case 'FAVORITE_STATUS_OFF':
 			return Object.assign({},state,{
 				favorite: false,
 			});
 		default:
 			return state;
 	}
 };
 export default favoriteStatusReducer;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值