我有一个这样的减速机:
import { SHOWSNACKBARACTION } from '../actions';
export default function showSnackbar(state = false, action) {
switch (action.type) {
case SHOWSNACKBARACTION:
const showSnackbar = action.bool;
return showSnackbar;
default:
return state;
}
}
每次调用一个动作,可能是另一个动作,所有的减速器都被调用。因此,如果操作不是SHOWSNACKBARACTION,则showSnackbar reducer将返回默认值= false。
但有时我想返回当前值,如果调用了其他操作,则不想更改该值。
是否有可能,返回当前值,所以没有任何变化,或者我每次调用另一个动作时都必须调用SHOWSNACKBARACTION,所以我没有得到默认值?
我读到,我不能在减速器中改变状态。但是我必须在这里更新状态或我该怎么办?
感谢您的帮助
答案 0 :(得分:1)
如果动作不是SHOWSNACKBARACTION,则为showSnackbar reducer 将返回默认值= false
这实际上并不正确。
Redux将使用当前状态填充参数state
。仅当状态未定义时才使用默认值。即。当你第一次创建redux状态时。
您当前的设置应该可以正常使用。
答案 1 :(得分:0)
组合我的减速器看起来像这样:
import { combineReducers } from 'redux';
import test from './test';
import metadata from './getMetaData';
import question from './getQuestion';
import showQuestion from './showQuestion';
import correct_answer from './sentGetAnswer';
import force_user_message from './force_user_message';
import showSnackbar from './showSnackbar';
const Reducer = combineReducers({
test,
metadata,
question,
showQuestion,
correct_answer,
force_user_message,
showSnackbar
});
export default Reducer;
我认为这也是正确的,不是吗?
可能在代码的另一部分上存在某些问题。我给了我所有的减速器一个它匹配与否的控制台日志。当我将SHOWSNACKBARACTION设置为true时,会出现这样的情况:
getMetaData.js:10 metadatareducernichteinusführt
getQuestion.js:15问题nichtsusgeführt
showQuestion.js:10 showQustionnichtsusgeführt
sentGetAnswer.js:10正确答案nichtsusgeführt
force_user_message.js:9 force_user_messagereducerausgeführt
showSnackbar.js:11 showSnackbarnichtususführt
Application.js:Application sind da中的156个元数据
getMetaData.js:10 metadatareducernichteinusführt
getQuestion.js:15问题nichtsusgeführt
showQuestion.js:10 showQustionnichtsusgeführt
sentGetAnswer.js:10正确答案nichtsusgeführt
force_user_message.js:16 forced_user_message_default
showSnackbar.js:7 showSnackbarreducerausgeführt
showSnackbar.js:8 true
Application.js:Application sind da中的156个元数据
Application.js:76欢迎gerendert
getMetaData.js:10 metadatareducernichteinusführt
getQuestion.js:15问题nichtsusgeführt
showQuestion.js:10 showQustionnichtsusgeführt
sentGetAnswer.js:10正确答案nichtsusgeführt
force_user_message.js:16 forced_user_message_default
showSnackbar.js:7 showSnackbarreducerausgeführt
showSnackbar.js:8 true
Application.js:76欢迎gerendert
index.js:131 der request zum forcen geht ######################
getMetaData.js:7metadatareducerausgeführt
getQuestion.js:15问题nichtsusgeführt
showQuestion.js:10 showQustionnichtsusgeführt
sentGetAnswer.js:10正确答案nichtsusgeführt
force_user_message.js:16 forced_user_message_default
showSnackbar.js:11 showSnackbarnichtususführt
Application.js:Application sind da中的156个元数据
getMetaData.js:10 metadatareducernichteinusführt
getQuestion.js:15问题nichtsusgeführt
showQuestion.js:10 showQustionnichtsusgeführt
sentGetAnswer.js:10正确答案nichtsusgeführt
force_user_message.js:16 forced_user_message_default
showSnackbar.js:7 showSnackbarreducerausgeführt
showSnackbar.js:8 true
Application.js:76欢迎gerendert
你可以看到,上次showSnackbar设置为true。但在反应开发工具中我可以看到它是错误的。怎么可能?
编辑:
看起来开发人员工具不会向我显示正确的值。你知道这个问题吗?或者是否可以刷新它们?
编辑2:
好的,我发现,在firefox的反应开发工具中一切正常。在Chrome中它似乎被打破了。