Redux Reducer错误取消所有任务,杀死所有传奇

Redux Reducer错误取消所有任务,杀死所有传奇,redux,redux-saga,Redux,Redux Saga,最近我两次在减速器中遇到由于未定义变量而导致的错误 在这两种情况下,这都会导致应用程序变得无响应,因为错误具有级联效应,并且我所有的saga“take”命令都被取消。 e、 g 等等 此外,在这两种情况下,修复都很简单——向减速器添加防御编码以防止出现这种情况 然而,如果代码允许一个未定义的代码通过,那么对应用程序的影响将是毁灭性的,我想知道是否还有其他方法 我应该用try/catch将开关包裹在减速器中吗 有没有 发生错误时停止所有取消的任务的方法 感谢您的任何意见我有一个有效的答案,但我

最近我两次在减速器中遇到由于未定义变量而导致的错误

在这两种情况下,这都会导致应用程序变得无响应,因为错误具有级联效应,并且我所有的saga“take”命令都被取消。 e、 g

等等

此外,在这两种情况下,修复都很简单——向减速器添加防御编码以防止出现这种情况

然而,如果代码允许一个未定义的代码通过,那么对应用程序的影响将是毁灭性的,我想知道是否还有其他方法

  • 我应该用try/catch将开关包裹在减速器中吗
  • 有没有 发生错误时停止所有取消的任务的方法

感谢您的任何意见

我有一个有效的答案,但我仍然希望您能发表评论,验证这是否是最好的答案,因为我对Redux比较陌生

我实施了我的第一个建议,从上面看,它似乎工作得很好,将停止我的问题

try {
    switch (action.type) {
        case '...':
    ...
} catch (err) {
    // Do something with the error here
    return state;  // state is unchanged
}
这是正确的还是有更好的方法?

编辑:这需要是一个纯组件,所以“在这里处理错误”必须意味着在状态中添加一些东西来跟踪错误。其他任何事情都需要通过对状态变化采取行动来完成

我有一个有效的答案,但我仍然希望得到一些评论来验证这是否是最好的答案,因为我对Redux比较陌生

我实施了我的第一个建议,从上面看,它似乎工作得很好,将停止我的问题

try {
    switch (action.type) {
        case '...':
    ...
} catch (err) {
    // Do something with the error here
    return state;  // state is unchanged
}
这是正确的还是有更好的方法?

编辑:这需要是一个纯组件,所以“在这里处理错误”必须意味着在状态中添加一些东西来跟踪错误。其他任何事情都需要通过对状态变化采取行动来完成

我认为这里的部分答案是解决导致减速机首先处理未定义值的情况。它要么需要更具防御性的编码,要么应该在发送操作之前验证数据。我认为这里的部分答案是解决导致减速机首先处理未定义值的情况。它要么需要更加防御性地编码,要么应该在调度操作之前验证数据。