zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    react hooks & props change & pagination current bug

    multi tables & pigination bug & current update

    just listen to the props' unique value change, then update your local state!

    
    import React, {
      useState,
      useEffect,
    } from 'react';
    
    import ExportableTable from '@/components/ExportableTable';
    import { generateFilename } from '@/utils/exportUtils';
    
    const TrendTable = ({
      startDate,
      endDate,
      dataSource,
      moduleName,
      analysisName,
      units,
      initCurrent,
    }) => {
      const [current, setCurrent] = useState(initCurrent);
      const [tableName, setTableName] = useState(analysisName);
      // const [unmounted, setUnmounted] = useState(false);
      useEffect(() => {
        console.log(`did mount`);
        // props change
        if(tableName !== analysisName) {
          console.log(`tableName`, tableName, analysisName);
          setCurrent(1);
          setTableName(analysisName);
        }
        let unmounted = false;
        if(!unmounted) {
          // cancel update state
        }
        return () => unmounted = true;
      }, [analysisName, tableName]);
    
      const columns = [
        {
          title: 'date',
          dataIndex: 'date',
          key: 'date',
          align: 'center',
           150,
        },
        {
          title: analysisName,
          dataIndex: 'value',
          key: 'value',
          align: 'center',
          render: text => `${text} ${units}`,
           150,
        },
      ];
    
      const total = dataSource ? dataSource.length : 0;
      console.log(`total`, total, current);
    
      const filename = generateFilename({
        moduleName,
        analysisName,
        startDate,
        endDate,
      });
    
      return (
        <ExportableTable
          filename={filename}
          size="small"
          bordered={false}
          rowKey="name"
          columns={columns}
          pagination={{
            current,
            pageSize: 10,
            showSizeChanger: true,
            pageSizeOptions: ['5', '10', '20'],
            showQuickJumper: true,
            showTotal: total => <span>{total} items</span>,
          }}
          dataSource={dataSource}
          defaultCurrent={1}
          onChange={(p) => {
            setCurrent(p.current);
          }}
        />
      );
    };
    
    export {
      TrendTable,
    };
    
    export default TrendTable;
    
    

    solution

    https://github.com/facebook/react/issues/14830#issuecomment-550211522

    
    import React, {
      useState,
      useEffect,
    } from 'react';
    
    import ExportableTable from '@/components/ExportableTable';
    import { generateFilename } from '@/utils/exportUtils';
    
    const TrendTable = ({
      startDate,
      endDate,
      dataSource,
      moduleName,
      analysisName,
      units,
      initCurrent,
    }) => {
      const [current, setCurrent] = useState(initCurrent);
      const [tableName, setTableName] = useState(analysisName);
      useEffect(() => {
        let unmounted = false;
        if(!unmounted) {
          if(tableName !== analysisName) {
            setCurrent(1);
            setTableName(analysisName);
          }
        }
        return () => unmounted = true;
      }, [analysisName, tableName]);
    
      const columns = [
        {
          title: '日期',
          dataIndex: 'date',
          key: 'date',
          align: 'center',
           150,
        },
        {
          title: analysisName,
          dataIndex: 'value',
          key: 'value',
          align: 'center',
          render: text => `${text} ${units}`,
           150,
        },
      ];
    
      const total = dataSource ? dataSource.length : 0;
      console.log(`total`, total, current);
    
      const filename = generateFilename({
        moduleName,
        analysisName,
        startDate,
        endDate,
      });
    
      return (
        <ExportableTable
          filename={filename}
          size="small"
          bordered={false}
          rowKey="name"
          columns={columns}
          pagination={{
            current,
            pageSize: 10,
            showSizeChanger: true,
            pageSizeOptions: ['5', '10', '20'],
            showQuickJumper: true,
            showTotal: total => <span>共 {total} 条记录</span>,
          }}
          dataSource={dataSource}
          defaultCurrent={1}
          onChange={(p) => {
            setCurrent(p.current);
          }}
        />
      );
    };
    
    export {
      TrendTable,
    };
    
    export default TrendTable;
    
    
    


  • 相关阅读:
    java对象存储管理
    Linux下添加新硬盘,分区及挂载
    挂载磁盘
    安装JDK
    RESTful架构详解
    java的编程习惯影响程序性能
    spring boot中的约定优于配置
    java8新特性:interface中的static方法和default方法
    约定优于配置的概念与思考
    java的数据类型:基本数据类型和引用数据类型
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11806447.html
Copyright © 2011-2022 走看看