Javascript 为什么将Redux操作创建者返回的操作放在括号中?

Javascript 为什么将Redux操作创建者返回的操作放在括号中?,javascript,reactjs,ecmascript-6,redux,Javascript,Reactjs,Ecmascript 6,Redux,我试图理解Redux的todosexample(),它包含以下actions/index.js: let nextTodoId = 0 export const addTodo = text => ({ type: 'ADD_TODO', id: nextTodoId++, text }) export const setVisibilityFilter = filter => ({ type: 'SET_VISIBILITY_FILTER', filter }

我试图理解Redux的todos
example(),它包含以下
actions/index.js

let nextTodoId = 0
export const addTodo = text => ({
  type: 'ADD_TODO',
  id: nextTodoId++,
  text
})

export const setVisibilityFilter = filter => ({
  type: 'SET_VISIBILITY_FILTER',
  filter
})

export const toggleTodo = id => ({
  type: 'TOGGLE_TODO',
  id
})

export const VisibilityFilters = {
  SHOW_ALL: 'SHOW_ALL',
  SHOW_COMPLETED: 'SHOW_COMPLETED',
  SHOW_ACTIVE: 'SHOW_ACTIVE'
}
我不完全清楚为什么
addTodo
setVisibilityFilter
toggleTodo
返回的对象被括在圆括号中,比如
({…})
,而不仅仅是花括号,
{…}


我在一些地方读到过这样的文章,括号对于防止Javascript过早插入分号很有用,但是开放的大括号不也会阻止分号被插入吗?

这些函数是ecmascript-6的箭头函数,如果你想返回一个对象,你必须使用
({..})
。如果不使用括号且仅使用curly one函数,则函数会看到类似的函数块,并且无法按此处的预期返回对象

const foo = () => bar;
实际上是

const foo = () => { return bar };
我们可以跳过
{}
返回
部分作为我们的速记,如您所见。我们不需要在速记中使用
return
,但是如果我们使用大括号作为块,我们必须使用
return
来通知函数“这是我的return”

简而言之,如果我们想返回一个对象呢

const foo = () => { object values };
然后我们的函数在这里需要一个返回,它也把花括号看作一个函数块,然后我们松开我们的对象

这就是为什么我们用括号括起函数体,以在速记方法中返回一个对象

const foo = () => ({ object values });

这些函数是ecmascript-6的箭头函数,如果要返回对象,则必须使用
({..})
,并带有箭头函数。如果不使用括号且仅使用curly one函数,则函数会看到类似的函数块,并且无法按此处的预期返回对象

const foo = () => bar;
实际上是

const foo = () => { return bar };
我们可以跳过
{}
返回
部分作为我们的速记,如您所见。我们不需要在速记中使用
return
,但是如果我们使用大括号作为块,我们必须使用
return
来通知函数“这是我的return”

简而言之,如果我们想返回一个对象呢

const foo = () => { object values };
然后我们的函数在这里需要一个返回,它也把花括号看作一个函数块,然后我们松开我们的对象

这就是为什么我们用括号括起函数体,以在速记方法中返回一个对象

const foo = () => ({ object values });

动作创建者是函数。函数体用花括号括起来。通过省略通常围绕函数体的花括号,箭头函数允许您立即返回,而不是使用return关键字。但是,对象也被花括号包围。如果省略括号,则箭头函数认为它正在打开和关闭函数,而不是返回对象

它认为:

const myActionCreator = (value) => {
  type: 'MY_ACTION',
  value
};
指:

const myActionCreator = function(value) {
  type: 'MY_ACTION',
  value
};
而不是:

const myActionCreator = function(value) {
  return {
    type: 'MY_ACTION',
    value
  };
};
要解决此问题,请在大括号周围加括号。现在,arrow函数知道它正在返回括号内的内容,而不是打开函数体。在括号内——你的对象


这适用于所有箭头函数,不仅仅是redux。

动作创建者是函数。函数体用花括号括起来。通过省略通常围绕函数体的花括号,箭头函数允许您立即返回,而不是使用return关键字。但是,对象也被花括号包围。如果省略括号,则箭头函数认为它正在打开和关闭函数,而不是返回对象

它认为:

const myActionCreator = (value) => {
  type: 'MY_ACTION',
  value
};
指:

const myActionCreator = function(value) {
  type: 'MY_ACTION',
  value
};
而不是:

const myActionCreator = function(value) {
  return {
    type: 'MY_ACTION',
    value
  };
};
要解决此问题,请在大括号周围加括号。现在,arrow函数知道它正在返回括号内的内容,而不是打开函数体。在括号内——你的对象


这适用于所有箭头函数,不仅仅是redux。

很好的解释!“函数定义用大括号括起来。”这听起来好像你必须写
{Function foo(){}}
。更好的措辞是:函数体用花括号括起来。你说得对。我知道会有一个更准确的术语来形容它。我已经更新了我的答案使用身体。很好的解释!“函数定义用大括号括起来。”这听起来好像你必须写
{Function foo(){}}
。更好的措辞是:函数体用花括号括起来。你说得对。我知道会有一个更准确的术语来形容它。我已经更新了我的答案以使用body。实际上,有一个“高级语法”部分指示将函数体括起来以返回对象文字。是的,正如您所述,文档中提到了这一点。实际上,有一个“高级语法”部分指示将函数体括起来以返回对象文字。是的,正如您所说,文档中提到了这一点。