首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React表UseMemo

React表UseMemo
EN

Stack Overflow用户
提问于 2022-03-11 16:35:05
回答 1查看 1.6K关注 0票数 0

我正在尝试实现reacts,以便在单击delete按钮时重新呈现表。delete工作,我可以看到我的数据数组随着每次单击delete按钮而减少,如果我强制重新加载页面,表将重新呈现。我不知道如何开始使用useMemo。有人能解释我是怎么做到的吗?

代码语言:javascript
复制
const Table = ({ columns, data }) => {
  const { getTableProps, headerGroups, rows, prepareRow } = useTable({
    columns,
    data,
  });

  return (
    <MaUTable {...getTableProps()}>
      <TableHead>
        {headerGroups.map(headerGroup => (
          <TableRow {...headerGroup.getHeaderGroupProps()}>
            {headerGroup.headers.map(column => (
              <TableCell {...column.getHeaderProps()}>{column.render('Header')}</TableCell>
            ))}
          </TableRow>
        ))}
      </TableHead>
      <TableBody>
        {rows.map((row, i) => {
          prepareRow(row);
          return (
            <TableRow data-row-item-id={row.values._id} {...row.getRowProps()}>
              {row.cells.map(cell => {
                return <TableCell {...cell.getCellProps()}>{cell.render('Cell')}</TableCell>;
              })}
            </TableRow>
          );
        })}
      </TableBody>
    </MaUTable>
  );
};

const ExamTable = ({ data, isAdmin }) => {
  const columns = useMemo(() =>  
    [
    {
      Header: 'Patient ID',
      accessor: 'patient_Id',
      // // filterable: true,
      Cell: props => {
        const { original } = props.cell.row;
        return (
          <Link to={{ pathname: '/Patient/', state: { PATIENT_ID: props.value } }}>
            <span data-item-id={original.name}>{props.value}</span>
          </Link>
        );
      },
    },
    {
      Header: 'Exam ID',
      accessor: 'exam_Id',
      Cell: props => {
        const { original } = props.cell.row;
        let patient_Id = props.cell.row.cells[0].value;
        let exam_Id = props.cell.row.cells[1].value;
        return (
          <Link
            to={{ pathname: '/DisplayExam', state: { patient_Id: patient_Id, exam_Id: exam_Id } }}>
            <span data-name={original.name}>{props.value}</span>
          </Link>
        );
      },
    },
    {
      Header: 'Image',
      accessor: 'png_filename',
      Cell: props => {
        return (
          <img
            style={{ height: '80px', width: '80px' }}
            src={`https://ohif-hack-diversity-covid.s3.amazonaws.com/covid-png/${props.value}`}
          />
        );
      },
    },
    {
      Header: 'Key Findings',
      accessor: 'key_findings',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-timeframe={original.name}>{props.value || '-'}</span>;
      },
    },
    {
      Header: 'Brixia Scores',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-timeframe={original.name}>{'1,2,3,4'}</span>;
      },
    },
    {
      Header: 'Age',
      accessor: 'age',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      Header: 'Sex',
      accessor: 'sex',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      Header: 'BMI',
      accessor: 'latest_bmi',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      Header: 'Zip Code',
      accessor: 'zip',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      // MOVE TO ADMIN
      Header: 'Admin Privileges',
      Accessor: (str) => 'delete',
      Cell: props => {
      return <span><Update href= "UpdateExam.js"> Update </Update>
      
            {/* <Delete onClick ={() => {deleteExam(props.values["patient_Id"], props.values['exam_Id']);}}> Delete </Delete> </span> */}
            <Delete onClick ={() => {
              data.splice(props.cell, 1)
              api.deleteExam({EXAM_ID: props.cell.row.original['exam_Id'], PATIENT_ID: props.cell.row.original['patient_Id']}).then(() => 
              {props.cell.row = undefined;});
              }}> Delete </Delete> </span>
          } 
        }
  ] [data, api]);

  if ({isAdmin}.isAdmin == true) { 
  return (
    <Wrapper>
      <CssBaseline />
      <Table data={data} columns={columns} />
    </Wrapper>
  );
}

if ({isAdmin}.isAdmin == false) { 
  return (
    <Wrapper>
      <CssBaseline />
      <Table data={data} columns={columns.slice(0,9)} />
    </Wrapper>
  );
} 
};
export default ExamTable;
EN

回答 1

Stack Overflow用户

发布于 2022-03-11 16:43:44

像这样

代码语言:javascript
复制
const columns = useMemo(() => [
    {
      Header: 'Patient ID',
      accessor: 'patient_Id',
      // // filterable: true,
      Cell: props => {
        const { original } = props.cell.row;
        return (
          <Link to={{ pathname: '/Patient/', state: { PATIENT_ID: props.value } }}>
            <span data-item-id={original.name}>{props.value}</span>
          </Link>
        );
      },
    },
    {
      Header: 'Exam ID',
      accessor: 'exam_Id',
      Cell: props => {
        const { original } = props.cell.row;
        let patient_Id = props.cell.row.cells[0].value;
        let exam_Id = props.cell.row.cells[1].value;
        return (
          <Link
            to={{ pathname: '/DisplayExam', state: { patient_Id: patient_Id, exam_Id: exam_Id } }}>
            <span data-name={original.name}>{props.value}</span>
          </Link>
        );
      },
    },
    {
      Header: 'Image',
      accessor: 'png_filename',
      Cell: props => {
        return (
          <img
            style={{ height: '80px', width: '80px' }}
            src={`https://ohif-hack-diversity-covid.s3.amazonaws.com/covid-png/${props.value}`}
          />
        );
      },
    },
    {
      Header: 'Key Findings',
      accessor: 'key_findings',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-timeframe={original.name}>{props.value || '-'}</span>;
      },
    },
    {
      Header: 'Brixia Scores',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-timeframe={original.name}>{'1,2,3,4'}</span>;
      },
    },
    {
      Header: 'Age',
      accessor: 'age',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      Header: 'Sex',
      accessor: 'sex',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      Header: 'BMI',
      accessor: 'latest_bmi',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      Header: 'Zip Code',
      accessor: 'zip',
      Cell: props => {
        const { original } = props.cell.row;
        return <span data-name={original.name}>{props.value}</span>;
      },
    },
    {
      // MOVE TO ADMIN
      Header: 'Admin Privileges',
      Accessor: (str) => 'delete',
      Cell: props => {
      return <span><Update href= "UpdateExam.js"> Update </Update>
      
            {/* <Delete onClick ={() => {deleteExam(props.values["patient_Id"], props.values['exam_Id']);}}> Delete </Delete> </span> */}
            <Delete onClick ={() => {
              data.splice(props.cell, 1)
              api.deleteExam({EXAM_ID: props.cell.row.original['exam_Id'], PATIENT_ID: props.cell.row.original['patient_Id']}).then(() => 
              {props.cell.row = undefined;});
              }}> Delete </Delete> </span>
          } 
        }
  ], [data, api])

如果在列定义中声明的任何变量都必须在deps数组中进行重新计算,则如果这些变量发生更改,则需要重新计算备忘。

  • UseMemo UseMemo只返回列定义。
  • 中使用的数据和api可能会更改,并且需要重新计算回传的值

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

https://stackoverflow.com/questions/71441731

复制
相关文章

相似问题

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