为什么这里有两组括号?
return state.filter(({ id }) => {
return id !== action.id
});
我很难过这个陈述!为什么不能这样:
return state.filter({ id }) => {
return id !== action.id
};
甚至可以尝试帮助我的人都很棒!
答案 0 :(得分:3)
如果使用类似于您给出的第二个示例,则语法将是错误的。您将在filter
语句后立即关闭括号。
在第一个示例中,实际的代码是这样的:
return state.filter( (someObj) => {
return someObj.id !== action.id
});
但是,为简化起见,我们正在破坏id参数。像这样:
const { id } = someObj;
See here more about destructuring。
在函数参数中,我们这样做:
( { id } ) => { ... }
在这里,我们直接从参数对象中选取id
属性。
在此上方有filter
的括号。所以:
filter( ( { id } ) => { ... } )
答案 1 :(得分:3)
在第二个示例中,您将{id}
写为filter
的自变量,但是filter
将这样编写的回调函数作为自变量
(arg) => {/*my code*/;}
因此,以这段代码并放置为参数可以得出结果
myFunction((arg) => {/*my code;*/})
您也可以
myCallback = (arg) => {/*my code*/;}
myFunction(myCallback);
另外,我猜您会遇到语法错误,因为函数的主要部分只是不带参数而编写。
这是您的第一个示例,在括号之间留有一些间距以更好地理解逻辑:
state.filter( ({ id }) => {return id !== action.id} );
另一种可能的书写方式
state.filter( function({ id }){return id !== action.id} );
更清晰吗?