Javascript 调度操作触发,但redux存储未更新

Javascript 调度操作触发,但redux存储未更新,javascript,reactjs,redux,reducers,react-redux,Javascript,Reactjs,Redux,Reducers,React Redux,目前在我的React Redux应用程序中,我想使用React将显示状态设置为false或true。设置为true时,应用程序将初始化。(有多个组件,因此使用react/redux进行此操作是有意义的。) 然而,我目前的问题是,即使我已经使用react-redux连接了我的应用程序,并且我的应用商店使用了provider,也会调用分派操作,而不会更新应用商店(我正在使用redux-dev工具进行双重检查,以及应用内测试) 我已经附上了我认为相关的代码,但是,整个代码库作为专门针对这个问题的分支提

目前在我的React Redux应用程序中,我想使用React将显示状态设置为false或true。设置为true时,应用程序将初始化。(有多个组件,因此使用react/redux进行此操作是有意义的。)

然而,我目前的问题是,即使我已经使用react-redux连接了我的应用程序,并且我的应用商店使用了provider,也会调用分派操作,而不会更新应用商店(我正在使用redux-dev工具进行双重检查,以及应用内测试)

我已经附上了我认为相关的代码,但是,整个代码库作为专门针对这个问题的分支提供。我花了相当长的时间在这方面(实际上是一个轻描淡写的说法),任何贡献都将不胜感激

部件相关代码

hideBlock(){
const{dispatch} = this.props;
dispatch(hideBlock);
}

return(
  <div className = "works">
    <button id="show-block" type="button" className="show-hide-button" onClick={this.showBlock}>show</button>
    <button id="hide-block" type="button" className="show-hide-button" onClick={this.hideBlock}>Hide</button>
  </div>
);

function mapStateToProps(state) {
  const {environment} = state;
  return{
    environment
  }
}

export default connect(mapStateToProps)(Form);
减速器

import * as types from "../constants/ActionTypes";

const initialState = {
   show: false
};

export default function environment(state = initialState, action) {
   switch(action.type) {
      case types.HIDE:
          return Object.assign({}, state, {
              type: types.HIDE
          });
      case types.SHOW:
          return Object.assign({}, state, {
              type: types.SHOW
          });
      default:
          return state;
    } 
 }

谢谢,再次感谢您的帮助。

它看起来像是
状态。show
设置为初始状态,但在减速器内部的任何情况下都不会修改。该操作有
show:true
,但reducer从不使用它来更新状态

下面是一个简化的缩减器,它根据操作的
show
字段更新
状态。show

export default function environment(state = initialState, action) {
   switch(action.type) {
      case types.HIDE:
      case types.SHOW:
          return Object.assign({}, state, {
              show: action.show
          });
      default:
          return state;
    } 
 }
或者,由于
action.show
action.type
具有相同的数据,您可以从操作中删除
show
,并依赖于操作类型:

export default function environment(state = initialState, action) {
   switch(action.type) {
      case types.HIDE:
          return Object.assign({}, state, {
              show: false
          });
      case types.SHOW:
          return Object.assign({}, state, {
              show: true
          });
      default:
          return state;
    } 
 }

因此,我向一位同事寻求帮助,结果是我将操作作为对象而不是函数返回。例如,更改以下代码:

hideBlock(){
  const{dispatch} = this.props;
  dispatch(hideBlock);
}


解决了这个问题。谢谢安德鲁

Kevan,如果您能提供一个代码片段来说明减速机的外观,以反映此评论,我们将不胜感激。谢谢:)已编辑以添加reducer代码段。不幸的是,这并没有解决问题中的错误,即操作是对象而不是函数。哎呀,操作创建者和操作之间的混淆再次出现。是的,操作是具有
类型
属性的对象,而不是函数。这就是为什么您可以创建更抽象/简洁的函数来制作redux/flux动作的原因,重要的是您最终得到的动作。
hideBlock(){
  const{dispatch} = this.props;
  dispatch(hideBlock);
}
hideBlock(){
  const{dispatch} = this.props;
  //change hideBlock to hideBlock()
  dispatch(hideBlock());
}