Eslint 错误将数组传递给函数并在其上使用 map
Eslint error went passing array into function and using map on it
我收到 linting 错误
Must use destructuring files assignment react/destructuring-assignment
对于下面的代码
const showFiles = label => (files) =>
(
<>
{files.map(({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
);
我试过改成这个
const showFiles = label => ({ map }) =>
(
<>
{map(({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
);
这会使 linting 错误消失,但实际网页出现以下错误。
TypeError: can't convert undefined to object
有什么办法可以解决这个我没有看到的 linting 错误吗?我必须使用 Array.prototypes.map
还是什么?
map
方法想要遍历数组的每个元素。所以让你的回调函数是:
files.map(item => <Typography>{item.name}</Typography>)
ES6 中的 rest
参数和 spread
运算符在这种情况下会很有用。在函数 showFiles
中,将 files
更改为 ...files
意味着该函数需要一个数组类型参数,这提高了可读性和 linting 过程。
例如
const showFiles = label => (...files) => {
return (
<>
{files.map(({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
);
}
并在调用函数时添加spread
运算符
return (
<>
{
showFiles('fileLabel')(...[
{name:'a'},
{name:'b'}
])
}
</>
);
我最终将其更改为
const showFiles = label => field => (
<>
{Array.prototype.map.call(field, ({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
)
有效,linting 错误消失。
我收到 linting 错误
Must use destructuring files assignment react/destructuring-assignment
对于下面的代码
const showFiles = label => (files) =>
(
<>
{files.map(({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
);
我试过改成这个
const showFiles = label => ({ map }) =>
(
<>
{map(({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
);
这会使 linting 错误消失,但实际网页出现以下错误。
TypeError: can't convert undefined to object
有什么办法可以解决这个我没有看到的 linting 错误吗?我必须使用 Array.prototypes.map
还是什么?
map
方法想要遍历数组的每个元素。所以让你的回调函数是:
files.map(item => <Typography>{item.name}</Typography>)
ES6 中的 rest
参数和 spread
运算符在这种情况下会很有用。在函数 showFiles
中,将 files
更改为 ...files
意味着该函数需要一个数组类型参数,这提高了可读性和 linting 过程。
例如
const showFiles = label => (...files) => {
return (
<>
{files.map(({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
);
}
并在调用函数时添加spread
运算符
return (
<>
{
showFiles('fileLabel')(...[
{name:'a'},
{name:'b'}
])
}
</>
);
我最终将其更改为
const showFiles = label => field => (
<>
{Array.prototype.map.call(field, ({ name }, index) => (
<Typography key={`${label}-file-${index}`}>{name}</Typography>
))}
</>
)
有效,linting 错误消失。