2016-11-28 82 views
9

我有一个异步函数在我的终极版的行为,并返回我的减速器这样的对象:所以基本上,当我开始调用异步函数我更新最佳实践来处理Redux的错误,并作出反应

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

了Redux状态fetching: true如果结果是成功满足,则fetched:truefetching:false
所以我用在连接反应,终极版的Redux的状态映射到的道具和我说这在我的组件的渲染功能:

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

一旦数据被提取,它会自动进入下一页。
但是,我的错误处理有问题。当错误从null更改为错误时,如何处理反应组件上的错误处理。我现在所拥有的是:

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

但现在我下一次我打电话给我的动作它已经this.props.error分配到一个错误,它不为空,导致它显示最终的局面即使没有错误也会弹出。
我是否必须在每次显示错误时重置错误,或者是否有更好的做法来做这件事?

回答

7

您可以使用redux-catch中间件捕获Redux减速器和中间件的错误。

您可以使用类似,

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中间件触发错误动作显示您的错误弹出。关闭弹出窗口时,请分派一个将错误重置为空的操作,以便在没有错误显示时不显示弹出窗口。

+0

这似乎对于我想要崩溃报告的情况很有用。我的意图是显示基于错误的模式。喜欢让说登录失败。 – abeikverdi

+0

@abeikverdi是的,您可以将有效载荷的动作分派为错误! 像,它就在那里! – ArchNoob

+0

我明白了。所以我可以根据我的有效载荷创建视图并将其显示给用户? – abeikverdi

1

我有一个类似的问题,当我关闭模态后,模态继续显示旧错误。在通过回调获得成功后,我通过调度“resetErrors”操作来解决此问题。

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

+0

是的,这也是我也想过的。但是现在我必须为不同的减速器做出如此多的重置动作,并将它们添加到我的视图中仅用于此目的。所以我认为也许有更好的方法来完成整个事情。 – abeikverdi

+1

单个动作可以根据需要更改任意数量的字段。设置'fetching'或'fetched'的动作也可以重置错误。也就是说,也许最好在模式关闭时重置它。请注意,在React-Redux中,当且仅当状态说明它应该是时,模态通常是可见的。触发器可能是状态中的错误。这意味着重置错误与关闭模式是一样的。另外,下一页切换应该是Redux中页面操作的一部分。 – DDS