首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iteratoreslintreact/jsx-key中缺少元素的"key“支柱

在iteratoreslintreact/jsx-key中缺少元素的"key“支柱
EN

Stack Overflow用户
提问于 2022-03-26 23:46:50
回答 1查看 146关注 0票数 0

下面的部分是返回Missing "key" prop for element in iteratoreslintreact/jsx-key

代码语言:javascript
运行
复制
{[...Array(10)].map((_) => (
  <Skeleton variant="rectangular" sx={{ my: 4, mx: 1 }} />
))}

我试图按以下方式解决这个问题:

代码语言:javascript
运行
复制
{[...Array(10)].map((x) => (
  <Skeleton variant="rectangular" sx={{ my: 4, mx: 1 }} key="x.id" />
))}

但我不太确定这是否正确。

全码

代码语言:javascript
运行
复制
import { useState, useEffect } from 'react';
import type { NextPage } from 'next';
import Container from '@mui/material/Container';
import Box from '@mui/material/Box';
import { DataGrid, GridColDef } from '@mui/x-data-grid';
import { Card, Paper } from '@mui/material';
import Skeleton from '@mui/material/Skeleton';
import { amber, orange } from '@mui/material/colors';

import FormOne from './../src/FormOne';

const columns: GridColDef[] = [
  { field: 'id', headerName: 'ID' },
  { field: 'title', headerName: 'Title', width: 300 },
  { field: 'body', headerName: 'Body', width: 600 },
];

const LoadingSkeleton = () => (
  <Box
    sx={{
      height: 'max-content',
    }}
  >
    {[...Array(10)].map((_) => (
      <Skeleton variant="rectangular" sx={{ my: 4, mx: 1 }} />
    ))}
  </Box>
);

const Home: NextPage = () => {
  const [posts, setPosts] = useState([]);
  const [loading, setLoading] = useState(true);

  // fetch data from fake API
  useEffect(() => {
    setInterval(
      () =>
        fetch('https://jsonplaceholder.typicode.com/posts')
          .then((response) => response.json())
          .then((data) => {
            setPosts(data);
            setLoading(false);
          }),
      3000
    );
  }, []);

  return (
    <Container
      maxWidth={false}
      sx={{
        height: '100vh',
        overflow: 'auto',
        paddingRight: '0px !important',
        paddingLeft: '0px !important',
        background: `linear-gradient(to right, ${amber[300]}, ${orange[500]})`,
      }}
    >
      <Card
        sx={{ marginBottom: 10, padding: 10, marginLeft: 25, marginRight: 25 }}
      >
        <FormOne />
      </Card>

      <Card sx={{ marginLeft: 25, marginRight: 25 }}>
        <Paper sx={{ padding: 5, height: '800px' }}>
          <DataGrid
            rows={posts}
            columns={columns}
            pageSize={10}
            autoHeight
            rowsPerPageOptions={[10]}
            disableSelectionOnClick
            disableColumnMenu
            disableColumnSelector
            components={{
              LoadingOverlay: LoadingSkeleton,
            }}
            loading={loading}
          />
        </Paper>
      </Card>
    </Container>
  );
};

export default Home;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-27 00:13:55

您应该为每个项目使用唯一的id。在您的代码key="x.id"中,"x.id"只是一个字符串,这意味着对所有项都是相同的,这是不正确的

如果每个项目都有唯一的If,请使用它们。否则,您可以使用索引作为键:

代码语言:javascript
运行
复制
{[...Array(10)].map((x, index) => (
  <Skeleton variant="rectangular" sx={{ my: 4, mx: 1 }} key={index} />
))}

阅读更多这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71632675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档