Javascript 为什么将Redux操作创建者返回的操作放在括号中?
我试图理解Redux的todosJavascript 为什么将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 }
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。实际上,有一个“高级语法”部分指示将函数体括起来以返回对象文字。是的,正如您所述,文档中提到了这一点。实际上,有一个“高级语法”部分指示将函数体括起来以返回对象文字。是的,正如您所说,文档中提到了这一点。