Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理Redux Reducer中的错误和异常?_Redux - Fatal编程技术网

如何处理Redux Reducer中的错误和异常?

如何处理Redux Reducer中的错误和异常?,redux,Redux,我们目前正在测试React/Redux应用程序中的错误处理。(我已经读过了)。在React中,我们实现了这一点,并且工作得非常好:对于未处理的异常,不再有空白页 不,我们尝试在reducer中抛出错误,我们看到它们以未触及的redux状态登录到控制台 减速器必须是纯的 我绝对支持。该功能应“简单”,无副作用,并经过良好测试。问题是:reducer开发人员可能会做出错误的假设(例如,redux状态下的属性可能未定义)。这个例子的结果是 [Error] Unhandled Promise Rejec

我们目前正在测试React/Redux应用程序中的错误处理。(我已经读过了)。在React中,我们实现了这一点,并且工作得非常好:对于未处理的异常,不再有空白页

不,我们尝试在reducer中抛出错误,我们看到它们以未触及的redux状态登录到控制台

减速器必须是纯的

我绝对支持。该功能应“简单”,无副作用,并经过良好测试。问题是:reducer开发人员可能会做出错误的假设(例如,redux状态下的属性可能未定义)。这个例子的结果是

[Error] Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'someVariableWithCanBeNullOrUndefined.someFunction')
可以说:至少没有白纸。但现在应用程序的状态有点尴尬,因为这些动作都被调度和执行了,但没有正确地减少。这种错误很容易被监督。 有没有办法处理这些编程运行时错误?甚至可能在React的错误边界中出现

仅导致日志条目的错误reducer函数示例:

reduceSomeState(state = new SomeState(), action: SomeAction) {
    throw new Error('some runtime error: e.g. a value in the state is undefined and accessed here');
}

据我所知,异常无法在Reducer或
connect(MapStateTops,mapDispatchToProps)(视图)中处理

尽管解决方案是设置一个全局错误处理程序。可以这样看:

import * as React from 'react';
import {render} from 'react-dom';
import {GlobalErrorView} from '../../globalError/GlobalErrorView';

window.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {

    render(
        (
            <GlobalErrorView
                error={error}
                okAction={() => window.location.reload()}
            />
        ),
        document.getElementById('app') as HTMLElement
    );
};
import*as React from'React';
从'react dom'导入{render};
从“../../globalError/GlobalErrorView”导入{GlobalErrorView};
window.onerror=(event:event | string,source?:string,lineno?:number,colno?:number,error?:error)=>{
渲染(
(
window.location.reload()}
/>
),
document.getElementById('app')作为HTMLElement
);
};

您可以分享代码/一些示例代码吗?