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

时间:2017-05-30 16:22:12

标签: reactjs ecmascript-6 redux redux-actions

我被迫使用redux-actions。在我的reducer中,这段代码可以工作:

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

然而,在reducer中我想console.log一些东西。我该怎么做?

2 个答案:

答案 0 :(得分:4)

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

,而不是使用简写箭头函数语法来隐式返回对象。
[FOOBAR]: (state) => {
  console.log('Inside FOOBAR action')
  return {
    ...state, value: 'the user clicked something 2'
  }
}

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

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

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

JavaScript引擎将{}解释为块。因此,您的代码具有({}),这意味着对象文字,因为括号只能包裹在表达式中。由于块不是表达式,而对象文字是表达式,因此引擎会将其解释为对象文字。

答案 1 :(得分:1)

以更详细的样式重写上面的箭头函数,允许您包含多个语句。然后你可以在控制台日志中滑动。

~/Desktop >> git clone git@gist.github.com:d1b8041051e62aa34f337b3dabc77d9a.git                                                                                                                                
Cloning into 'd1b8041051e62aa34f337b3dabc77d9a'...
The authenticity of host 'gist.github.com (192.30.253.118)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl22E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gist.github.com,192.30.253.118' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.