2 回答
TA贡献1816条经验 获得超6个赞
关于 eslint,我认为这是一个缺失的部分,因为如果您以等效的方式编写函数:
data.Items.map((dataLine) => {
if (data.Type == "API") {
dataLine.Config = {
Size: "L"
};
delete dataLine.Other;
}
return dataLine;
});
你不会收到任何警告。也许这是在那里打开问题的情况。
您可以传递 {props : true} ,就像 GProst 所说的那样,但这将强制您不要分配参数的任何属性,这是一件好事,例如:
const newItems = data.Items.map(({State,...dataLine}) => {
if (data.Type == "API") {
dataLine.Config = { // not allowed with props : true
Size: "L"
};
delete dataLine.Other; // not allowed with props : true
}
return dataLine;
});
为什么 eslint 有这样的规则?
您正在修改 data.Items 的属性,这会对地图上的回调函数的外部环境产生副作用。在某些情况下,这会让你处于糟糕的境地,比如不知道哪一段代码删除了某些属性。
关于如何安全地处理这个问题的建议是返回一个全新的对象,使您的 data.Items 在您的情况下不可变:
const data = {
Type: "API",
Items: [{
State: [{Name: "Pending"}],
Config: {
Size: "M"
},
Other: "string.."
}]
}
const newItems = data.Items.map(({State,...dataLine}) => {
const dataLineCopy = JSON.parse(JSON.stringify(dataLine))
if (data.Type == "API") {
dataLineCopy.Config = {
Size: "L"
};
delete dataLineCopy.Other;
}
return dataLineCopy;
});
console.log(JSON.stringify(newItems, null, 2));
TA贡献1796条经验 获得超10个赞
no-param-reassign在 eslint 配置中编辑规则,将选项设置props为false:
"no-param-reassign": ["error", { "props": false }]添加回答
举报
