为什么我总是在reducer中得到defaut值而不是当前值?

时间:2017-12-10 13:01:57

标签: reactjs redux react-redux

我有一个这样的减速机:

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,所以我没有得到默认值?

我读到,我不能在减速器中改变状态。但是我必须在这里更新状态或我该怎么办?

感谢您的帮助

2 个答案:

答案 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中它似乎被打破了。