【问题标题】:Best practice to handle errors in Redux and React在 Redux 和 React 中处理错误的最佳实践
【发布时间】:2016-11-28 05:44:39
【问题描述】:

我的 redux 操作中有一个异步函数,它在我的 reducer 中返回一个像这样的对象:

{
user: {},
fetching: false,
fetched, false,
error: null
}

所以基本上当我开始调用异步函数时,我将 redux 状态更新为fetching: true,如果结果成功实现则fetched:truefetching:false
因此,我使用 react-redux 中的 connect 将 redux 状态映射到 props,并将其添加到组件的渲染函数中:

if(this.props.fetched) {
  // Go to next page
}

一旦获取数据,它会自动转到下一页。
但是,我的错误处理有问题。当错误从 null 变为错误时,我该如何处理我的反应组件上的错误处理。我现在拥有的是:

if(this.props.error != null) {
   // popup error
} 

但是现在我最终遇到的情况是,下次我调用我的操作时,它已经将 this.props.error 分配给了一个错误,并且它不是 null ,即使没有错误,它也会显示弹出窗口。
每次显示错误时我都必须重置错误吗?或者有没有更好的做法来完成整个操作?

【问题讨论】:

    标签: javascript reactjs redux react-redux


    【解决方案1】:

    您可以使用redux-catch 中间件来捕获 Redux reducer 和中间件的错误。

    你可以使用类似的东西,

    import reduxCatch from 'redux-catch';
    
    function errorHandler(error, getState, lastAction, dispatch) {
        //dispatch ERROR action as you need.
    }
    
    const store = createStore(reducer, applyMiddleware(
      reduxCatch(errorHandler)
    ));
    

    并且,当您收到由redux-catch 中间件触发的错误操作时,显示您的错误弹出窗口。当您关闭弹出窗口时,调度一个将错误重置为 null 的操作,以便在没有要显示的错误时不会显示弹出窗口。

    【讨论】:

    • 这对于我想做崩溃报告的情况似乎很有用。我的意图是根据错误显示一个模式。比如说登录失败。
    • @abeikverdi 是的,您可以将有效负载作为错误发送操作!就像,它就在那里!
    • 我明白了。所以我可以根据我的有效负载创建一个视图并将其显示给用户?
    • 对不起,我弄乱了那个评论,但是是的,你可以根据你的有效负载创建一个你需要的视图正常错误视图和容器是的.. @abeikverdi
    • 谢谢。它似乎是一个非常有用的库。
    【解决方案2】:

    当我关闭模式后,模式继续显示旧错误时,我遇到了类似的问题。我通过回调收到成功后,通过调度“resetErrors”操作解决了这个问题。

    除了每次都“重置”它之外,我还没有遇到更好的解决方案。

    【讨论】:

    • 是的,我也是这么想的。但是现在我必须为不同的减速器做这么多的重置操作,并将它们添加到我的视图中只是为了这个目的。所以我想也许有更好的方法来做这件事。
    • 单个操作可以更改任意数量的字段。设置fetchingfetched 的操作也可以重置错误。也就是说,也许最好在模式关闭时重置它。请注意,在 React-Redux 中,模式通常是可见的,当且仅当状态表明它应该是。触发器可能是状态错误。这意味着重置错误与关闭模式相同。此外,下一页切换应该是 Redux 中页面操作的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2022-12-01
    • 2018-09-12
    • 2017-11-26
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多