一旦reender自动组件一次调度没有调度动作

时间:2017-08-11 07:25:04

标签: reactjs redux react-redux redux-thunk

我使用react,redux和redux-thunk middlewere。

我的代码如下:

  function thunkFunction(){
  return(dispatch) => { 
    dispatch(toggleSmth(false));
    dispatch(toggle2Smth(false));

    SomeService.getSmth()
    .then(response => {

      dispatch(oneMoreAction);
      dispatch(one2MoreAction);

    }
  }
}

现在我在componenDidMount()之后在某个组件中调度整个thunk动作。

它的工作原理如下:

  1. 调度(toggleSmth(假));
  2. 调度(toggle2Smth(假));
  3. 承诺回调队列(不做.then元素)
  4. }转到关闭的大括号
  5. 组件回复
  6. 去.then(
  7. 调度(oneMoreAction)
  8. 自动组件修订(为什么!?)
  9. 回到第二次发送 - >调度(one2MoreAction)
  10. 另一个自动组件回复(为什么!?)
  11. 问题是:

    为什么一旦调度等待整个堆栈清除。在Promise中,dispatch组件会自动重新发送,之后它会返回到下一个Promise函数元素吗?

    另外当我把dispatch(toggleSmth(false))放在promise之内时:

    function thunkFunction(){=
      return(dispatch) => { 
        SomeService.getSmth()
        .then(response => {
    
          dispatch(toggleSmth(false));
          dispatch(toggle2Smth(false));
          dispatch(oneMoreAction);
          dispatch(one2MoreAction);
    
        }
      }
    }
    

    dispatch(toggleSmth(false))dispatch(toggle2Smth(false))自动reender组件。 (不要等待清除回调堆栈'}')。在reender接下来之后 - >到第一个dispatch(oneMoreAction);

    为什么一旦调度导致自动reender并且一旦你必须等待函数内部元素的执行?

1 个答案:

答案 0 :(得分:0)

我认为你对两件事有一点误解:

  • 反应组分生命周期
  • thunk的实际工作方式。

在最基本的层面上发生的事情是,你正在召唤一个总共调用4次的thunk动作(一个proimise)。每次调用修改状态的操作时,该状态触及的组件(通过mapStateToProps)都将重新呈现。

当您将所有调度函数置于1个异步调用(即嵌套一次)(在这种情况下为SomeService.getSmth().then(() => {...});))时,它会导致它们相对于彼此同步触发...组件仍会重新呈现因为它被被修改的国家所触及。

在第一种情况下,相对于彼此同步调用2个调度,然后仅在服务调用完成后,服务调用与其他两个调度一起发生