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;
    
    
    


  • 相关阅读:
    C++第11课 迭代器与仿函数 (二)
    C++第11课 迭代器与仿函数 (一)
    Python语法的应用
    Python面试
    02_Python之基础编程
    01_Python之_学前准备
    Sorting It All Out (拓扑排序) poj1094
    Codeforces Global Round 13 Editorial补题
    今天做题做到了并查集相关的内容~简单介绍一下关于并查集的东西
    留言板
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11806447.html
Copyright © 2011-2022 走看看