react hooks & props change & pagination current bug
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',
      width: 150,
    },
    {
      title: analysisName,
      dataIndex: 'value',
      key: 'value',
      align: 'center',
      render: text => `${text} ${units}`,
      width: 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',
      width: 150,
    },
    {
      title: analysisName,
      dataIndex: 'value',
      key: 'value',
      align: 'center',
      render: text => `${text} ${units}`,
      width: 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;

react hooks & props change & pagination current bug的更多相关文章
- react hooks & component will unmount & useEffect & clear up
		react hooks & component will unmount & useEffect & clear up useEffect & return === u ... 
- React Hooks 深入系列 —— 设计模式
		本文是 React Hooks 深入系列的后续.此篇详细介绍了 Hooks 相对 class 的优势所在, 并介绍了相关 api 的设计思想, 同时对 Hooks 如何对齐 class 的生命周期钩子 ... 
- React Hooks 实现和由来以及解决的问题
		与React类组件相比,React函数式组件究竟有何不同? 一般的回答都是: 类组件比函数式组件多了更多的特性,比如 state,那如果有 Hooks 之后呢? 函数组件性能比类组件好,但是在现代浏览 ... 
- React Hooks总结
		Hook 前言 什么是Hook 自从 16.8 版本开始,hooks 的出现使得你可以在不编写 class 的情况下使用状态管理以及其它 React 的特性. 那么在 React Hooks 出现之前 ... 
- [React Hooks长文总结系列一]初出茅庐,状态与副作用
		写在开头 React Hooks在我的上一个项目中得到了充分的使用,对于这个项目来说,我们跳过传统的类组件直接过渡到函数组件,确实是一个不小的挑战.在项目开发过程中也发现项目中的其他小伙伴(包括我自己 ... 
- 谈谈react hooks的优缺点
		前言Hook 是 React 16.8 的新增特性.它是完全可选的,并且100%向后兼容.它可以让你使用函数组件的方式,运用类组件以及 react 其他的一些特性,比如管理状态.生命周期钩子等.从概念 ... 
- react之react Hooks
		函数组件,没有 class 组件中的 componentDidMount.componentDidUpdate 等生命周期方法,也没有 State,但这些可以通过 React Hook 实现. Rea ... 
- 你真的会用react hooks?看看eslint警告吧!(如何发请求、提升代码性能等问题)
		前言 看过几个react hooks 的项目,控制台上几百条警告,大多是语法不规范,react hooks 使用有风险,也有项目直接没开eslint.当然,这些项目肯定跑起来了,因为react自身或者 ... 
- 关于React Hooks,你不得不知的事
		React Hooks是React 16.8发布以来最吸引人的特性之一.在开始介绍React Hooks之前,让咱们先来理解一下什么是hooks.wikipedia是这样给hook下定义的: In c ... 
随机推荐
- loj10173
			炮兵阵地 司令部的将军们打算在 N×M 的网格地图上部署他们的炮兵部队.一个 N×M的地图由 N 行 M 列组成,地图的每一格可能是山地(用 H 表示),也可能是平原(用 P表示),如下图.在每一格平 ... 
- Result Maps collection already contains value for xxxMapper.BaseResultMap错误解决办法
			原因分析: 这些代码因为是工具自动生成的,所以也没仔细检查.一个小小的错误,导致的. 解决办法: 1.由于使用ibatis的TempTestTableMapper.xml实现接口TempTestTab ... 
- python基础学习2 函数变量与赋值
			学习的第一步,就是通常的输出函数:print() 1.基础主要学习了变量的赋值,变量名可以疑字母.数字.下划线(_)进行命名,但是不能以数字开头 变量的赋值:变量名 = 变量值 2.模块的导入,和调用 ... 
- 并发编程(Process对象的join方法)(
			一. Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情况下 ... 
- 36.Samba 文件共享服务1--安装及配置参数解释
			1.Samba 服务程序现在已经成为在Linux 系统与Windows系统之间共享文件的最佳选择. 1)安装: [root@localhost ~]#yum install samba Loaded ... 
- arp病毒系列——攻击类型
			到目前为止,我所见闻的arp病毒攻击导致局域网几乎瘫痪的事例已经不下3次了,而且非常巧的是:每次都是将近学校考试.大批同学新下四楼更新IP-Mac的时候出现!严重的时候你根本就ping不通网关 ... 
- 数理统计4:均匀分布的参数估计,次序统计量的分布,Beta分布
			接下来我们就对除了正态分布以外的常用参数分布族进行参数估计,具体对连续型分布有指数分布.均匀分布,对离散型分布有二项分布.泊松分布几何分布. 今天的主要内容是均匀分布的参数估计,内容比较简单,读者应尝 ... 
- cassandra权威指南读书笔记--读写数据
			写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ... 
- JVM之堆体系结构
			1.Heap堆(Java7之前) 一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的.类加载器读取了类文件后,需要把类.方法.常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆 ... 
- 使用 requests.post 方法抓取有道翻译结果
			import requests as rq import json def get_translate(word=None): url = 'http://fanyi.youdao.com/trans ... 
