我如何在reactjs中使异步函数从redux动作中调用另外两个函数

萨加尔·沙万(Sagar Chavan)

我正在使用react和redux进行状态管理。在我的UI中,我有一个按钮,单击该按钮会调用一个函数,并且该函数会在内部调用2个执行特定任务的redux动作。问题是我的函数,当我单击按钮后打电话时,它立即调用了两个函数。

这是我的按钮点击功能

const handleDecrement = (productId) => {
    props.minusQuantity(productId, props.guestIdData); // call make to redux action to perform API action

    props.quantityData.forEach((item) => {
        if (item.productQuantity < 1) {  // value of state. Which is instantly changed
            props.removeWholeItem(productId); // Another API call to redux action 
        }
    });
};

我想先调用这个函数

props.minusQuantity(productId, props.guestIdData); 

然后在下面的代码

props.quantityData.forEach((item) => {
        if (item.productQuantity < 1) {  // value of state. Which is instantly changed
            props.removeWholeItem(productId); // Another API call to redux action 
        }
    });
HMR

假设minusQuantity是一个重击操作,它返回一个可以等待的诺言:

const minusQuantity = (productId, guestIdData) => (
  dispatch,
  getState
) => {
  return Promise.resolve('async value');
};

现在,其他两个答案都可以使用:

const handleDecrement = async (productId) => {
  await props.minusQuantity(productId, props.guestIdData); 

要么

const handleDecrement = (productId) => {
  props.minusQuantity(productId, props.guestIdData).then(
    ()=>{
      //do other stuff here
    }
  )

工作示例:

const { Provider, connect } = ReactRedux;
const { createStore, applyMiddleware, compose } = Redux;

const initialState = {};
//action types
const BEFORE_ASYNC = 'BEFORE_ASYNC';
const AFTER_ASYNC = 'AFTER_ASYNC';
//action creators
const minusQuantity = () => (dispatch) => {
  dispatch({ type: BEFORE_ASYNC });
  //note it is returning a promise
  return new Promise((resolve) =>
    setTimeout(
      () => resolve(dispatch({ type: AFTER_ASYNC })),
      2000
    )
  );
};
const reducer = (state, { type }) => {
  console.log('reducer called with action:', type);
  return state;
};
//creating store with redux dev tools
const composeEnhancers =
  window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
  reducer,
  initialState,
  composeEnhancers(
    applyMiddleware((store) => (next) => (action) =>
      typeof action === 'function' //DIY thunk middleware
        ? action(store.dispatch)
        : next(action)
    )
  )
);
const App = (props) => {
  const handleDecrement = (productId) => {
    console.log('in handeDecrement starting async action');
    props
      .minusQuantity(productId)
      .then(() =>
        console.log('in handleDecrement after async action')
      );
  };
  return (
    <button onClick={handleDecrement}>
      start async action
    </button>
  );
};
const AppContainer = connect(undefined, {
  minusQuantity,
})(App);
ReactDOM.render(
  <Provider store={store}>
    <AppContainer />
  </Provider>,
  document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/4.0.5/redux.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-redux/7.2.0/react-redux.min.js"></script>
<div id="root"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在opencpu中链接两个函数调用

来自分类Dev

两个函数或两个类如何在python中相互调用

来自分类Dev

如何在Redux中处理两个连续且相关的异步调用?

来自分类Dev

如何调用两个箭头函数onclick ReactJS

来自分类Dev

如何在构造函数的成员初始化器列表中调用两个函数?

来自分类Dev

如何在componentDidMount中调用两个异步方法?

来自分类Dev

如何在AngularJS中完成两个$ http调用来进行函数调用?

来自分类Dev

如何在两个shell脚本之间调用函数?

来自分类Dev

如何在Angular中使用两个构造函数

来自分类Dev

c# - 如何在c#中的非异步函数中使用await调用异步函数?

来自分类Dev

如何在Django模板中使用两个表单,以及如何在提交表单时调用不同的函数

来自分类Dev

如何使用Formik在onchange中调用两个函数

来自分类Dev

如何在Android中单击按钮调用两个函数?

来自分类Dev

从两个不同的服务接收数据后,如何在指令中调用函数?

来自分类Dev

如何在控制器中调用两个模型函数?拉拉维尔

来自分类Dev

如何在非异步函数中调用异步函数

来自分类Dev

我们可以在Appscript调用的单个函数中调用两个函数吗?

来自分类Dev

如何使用$ q将函数的执行延迟到另外两个函数执行完毕?

来自分类Dev

对两个异步函数调用的结果起作用

来自分类Dev

调用两个异步函数之一,但不能两个都调用

来自分类Dev

如何在angularjs中单击两个函数

来自分类Dev

如何在函数中编写两个可变日期?

来自分类Dev

如何在javascript中总结两个不同的函数

来自分类Dev

如何在 PostgreSQL 函数中组合两个选择?

来自分类Dev

如何在函数R中输出两个结果

来自分类Dev

如何在两个脚本中使用布尔值来决定是否调用函数?

来自分类Dev

ReactJS使用onClick调用两个函数

来自分类Dev

如何在 JavaScript 中检测两个按钮中的哪一个调用了函数

来自分类Dev

如何在python的groupby函数中使用带有两个参数的用户定义函数

Related 相关文章

  1. 1

    如何在opencpu中链接两个函数调用

  2. 2

    两个函数或两个类如何在python中相互调用

  3. 3

    如何在Redux中处理两个连续且相关的异步调用?

  4. 4

    如何调用两个箭头函数onclick ReactJS

  5. 5

    如何在构造函数的成员初始化器列表中调用两个函数?

  6. 6

    如何在componentDidMount中调用两个异步方法?

  7. 7

    如何在AngularJS中完成两个$ http调用来进行函数调用?

  8. 8

    如何在两个shell脚本之间调用函数?

  9. 9

    如何在Angular中使用两个构造函数

  10. 10

    c# - 如何在c#中的非异步函数中使用await调用异步函数?

  11. 11

    如何在Django模板中使用两个表单,以及如何在提交表单时调用不同的函数

  12. 12

    如何使用Formik在onchange中调用两个函数

  13. 13

    如何在Android中单击按钮调用两个函数?

  14. 14

    从两个不同的服务接收数据后,如何在指令中调用函数?

  15. 15

    如何在控制器中调用两个模型函数?拉拉维尔

  16. 16

    如何在非异步函数中调用异步函数

  17. 17

    我们可以在Appscript调用的单个函数中调用两个函数吗?

  18. 18

    如何使用$ q将函数的执行延迟到另外两个函数执行完毕?

  19. 19

    对两个异步函数调用的结果起作用

  20. 20

    调用两个异步函数之一,但不能两个都调用

  21. 21

    如何在angularjs中单击两个函数

  22. 22

    如何在函数中编写两个可变日期?

  23. 23

    如何在javascript中总结两个不同的函数

  24. 24

    如何在 PostgreSQL 函数中组合两个选择?

  25. 25

    如何在函数R中输出两个结果

  26. 26

    如何在两个脚本中使用布尔值来决定是否调用函数?

  27. 27

    ReactJS使用onClick调用两个函数

  28. 28

    如何在 JavaScript 中检测两个按钮中的哪一个调用了函数

  29. 29

    如何在python的groupby函数中使用带有两个参数的用户定义函数

热门标签

归档