#前言
使用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;