如何在 mapDispatchToProps 或更新道具后运行回调函数,使用 react redux?

Posted

技术标签:

【中文标题】如何在 mapDispatchToProps 或更新道具后运行回调函数,使用 react redux?【英文标题】:How to run callback function after mapDispatchToProps OR update the props, using react redux? 【发布时间】:2020-08-01 02:01:09 【问题描述】:

这是一个例子。

我的代码是:

const mapDispatchToProps = dispatch => (
  onChangeHandler: (name,value) =>
    dispatch( type: "REGISTRATION", key: name, value )
);

但我需要这样的东西:

const mapDispatchToProps = dispatch => (
    onChangeHandler: (name,value) =>
    dispatch( type: "REGISTRATION", key: name, value ).then((nextProps)=>console.log(nextProps))
);

请帮助我们。

【问题讨论】:

【参考方案1】:
const mapDispatchToProps=dispatch=>(
  addToCartHandler:data=>dispatch(addToCart(data)),
  removeToCartHandler:data=>dispatch(removeToCart(data))
)

【讨论】:

【参考方案2】:

开箱即用的 Redux 数据流是同步的,因此“然后”调度没有意义,因为它不返回任何内容。您可以在此处阅读更多相关信息:

https://redux.js.org/advanced/async-flow

我建议查看 redux-thunk,它允许您决定何时调度,是同步还是异步,并允许您从存储中检索更新的状态。它通过允许你调度一个函数而不是一个动作来做到这一点。该功能为您提供dispatchgetState

这是一个例子:

const onChangeHandler = (name, value) => (dispatch, getState) => 
    // Dispatch event
    dispatch( type: "REGISTRATION", key: name, value );

    // Get updated state
    console.log("state :", getState());
;

export default connect(null,  onChangeHandler )(MyComponent);

但是,如果您正在考虑从组件中创建商店更新的副作用,我建议您使用 useEffect 挂钩来响应由于 redux 商店状态更新组件道具而导致的更新.

这是一个例子:

const MyComponent = (key, value) => 
    useEffect(() => 
        console.log(`key or value updated: $key $value`);
    , [key, value]);

    return (
        <span>Current props are key and value</span>
    )
;

【讨论】:

以上是关于如何在 mapDispatchToProps 或更新道具后运行回调函数,使用 react redux?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mapDispatchToProps 或更新道具后运行回调函数,使用 react redux?

如何访问 mapDispatchToProps 中 mapStateToProps 添加的属性?

如何使用 thunk 操作对 mapDispatchToProps 进行单元测试

React-redux mapStateToProps,mapDispatchToProps 如何使用

如何使用 React-Testing-Library 测试 mapDispatchToProps?

React Native,Fetch和Dispatch:如何在mapDispatchToProps()中访问responseData?