微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将AntD可调整大小的表转换为使用功能组件

如何解决将AntD可调整大小的表转换为使用功能组件

由于我的代码主要基于功能组件,因此我试图将类组件转换为功能组件

我知道如何更改其他更常见的内容,例如状态和功能,但是我不太确定如何转换这两个代码块。更改之后,现在无法确定可调整大小的功能

handleResize = index => (e,{ size }) => {
    this.setState(({ columns }) => {
      const nextColumns = [...columns];
      nextColumns[index] = {
        ...nextColumns[index],width: size.width,};
      return { columns: nextColumns };
    });
  };

  render() {
    const columns = this.state.columns.map((col,index) => ({
      ...col,onHeaderCell: column => ({
        width: column.width,onResize: this.handleResize(index),}),}));

    return <Table bordered components={this.components} columns={columns} dataSource={this.data} />;
  }
}

这是在我尝试更改代码之后。感谢您的帮助!

import React,{ useState } from 'react';
import './AccountPortfolio.scss';
import HeaderTitle from '../../../components/HeaderTitle/HeaderTitle';
import Footer from '../../../components/Footer/Footer';
import Sidebar from '../../../components/Navigation/Sidebar/Sidebar';
import HeaderComponent from '../../../components/Navigation/HeaderComponent/HeaderComponent';
import { Layout,Table,Breadcrumb } from 'antd';
import { Resizable } from 'react-resizable';
// import 'react-resizable/css/styles.css';

const ResizableTitle = (props) => {
  const { onResize,width,...restProps } = props;

  if (!width) {
    return <th {...restProps} />;
  }

  return (
    <Resizable
      width={width}
      height={0}
      handle={
        <span
          className="react-resizable-handle"
          onClick={(e) => {
            e.stopPropagation();
          }}
        />
      }
      onResize={onResize}
      draggableOpts={{ enableuserSelectHack: false }}
    >
      <th {...restProps} />
    </Resizable>
  );
};

const { Content } = Layout;
function AccountPortfolioPage(props) {
  const [columns,setColumns] = useState([
    {
      title: 'Date',dataIndex: 'date',width: 200,},{
      title: 'Amount',dataIndex: 'amount',width: 100,sorter: (a,b) => a.amount - b.amount,{
      title: 'Type',dataIndex: 'type',{
      title: 'Note',dataIndex: 'note',{
      title: 'Action',key: 'action',render: () => <a>Delete</a>,]);

  const components = {
    header: {
      cell: ResizableTitle,};

  const data = [
    {
      key: 0,date: '2018-02-11',amount: 120,type: 'income',note: 'transfer',{
      key: 1,date: '2018-03-11',amount: 243,{
      key: 2,date: '2018-04-11',amount: 98,];

  const handleResize = (index) => (e,{ size }) => {
    setColumns(({ columns }) => {
      const nextColumns = [...columns];
      nextColumns[index] = {
        ...nextColumns[index],};
      return { columns: nextColumns };
    });
  };

  const columnsData = columns.map((col,index) => ({
    ...col,onHeaderCell: (column) => ({
      width: column.width,onResize: handleResize(index),}));

  return (
    <>
      <Layout className="antsidebar__layout">
        <Sidebar defaultSelectedKeys="Account Portfolio" />
        <Layout className="antsidebar__site-layout">
          <HeaderComponent />
          <Content style={{ margin: '0 16px' }}>
            <Breadcrumb style={{ margin: '16px 0' }}>
              <Breadcrumb.Item>MMS</Breadcrumb.Item>
              <Breadcrumb.Item>Account Portfolio</Breadcrumb.Item>
            </Breadcrumb>
            <div className="antsidebar__site-layout-background">
              <HeaderTitle headerText="Account Portfolio" />
              <Table bordered components={components} columns={columnsData} dataSource={data} />
            </div>
            <Footer />
          </Content>
        </Layout>
      </Layout>
    </>
  );
}

export default AccountPortfolioPage;

解决方法

好的,我不知道这是否是正确的方法,但是在我将句柄调整大小功能更改为此之后,它现在可以正常工作

  const handleResize = (index) => (e,{ size }) => {
    const nextColumns = [...columns];
    nextColumns[index] = {
      ...nextColumns[index],width: size.width,};

    setColumns(nextColumns);
  };

让我知道是否有更好的方法来修复/改进它们。预先感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?