我如何在我的 reducer 中允许多个语句?

How do I allow for multiple statements in my reducer?

我被迫使用redux-actions。在我的减速器中,这段代码有效:

return handleActions({
  [FOOBAR]: (state) => ({
    ...state, value: 'the user clicked something 2'
  })
}, {})

但是,在减速器中我想 console.log 一些东西。我该怎么做?

您的代码当前 return 是箭头函数中的一个对象,用于指示后续状态。您可以使用 a block 来容纳多个语句,包括您的 console.log,而不仅仅是隐式的 return,而不是使用 shorthand 箭头函数语法来隐式 return 对象:

[FOOBAR]: (state) => {
  console.log('Inside FOOBAR action')
  return {
    ...state, value: 'the user clicked something 2'
  }
}

由于缺少 ()1{} 表示块而不是对象文字。因此,您可以在块内使用其他语句,但您必须 return 您的后续状态对象,因为它不会隐式 return.


这里 {} 是块而不是对象文字的原因是因为 arrow functions 有多种可接受的语法,其中一个使用块:

(param1, param2, …, paramN) => { statements }

JavaScript 引擎将 {} 解释为一个块。所以,你的代码有 ({}) 这确实意味着对象文字,因为括号只能 包裹在表达式 周围。由于块不是表达式,对象文字 是表达式,引擎将其解释为对象文字。

以更详细的样式重写上面的箭头函数,这样您就可以包含多个语句。然后你可以输入控制台日志。

return handleActions({
  [FOOBAR]: (state) => {
    console.log('I LOG ALL THE THINGS');
    return {...state, value: 'the user clicked something 2'};
  }
}, {});