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 ...
随机推荐
- ByteDance 2019 春招题目
牛客网字节跳动笔试真题:https://www.nowcoder.com/test/16516564/summary 分了 2 次做,磕磕碰碰才写完,弱鸡悲鸣. 1. 聪明的编辑 题目:Link . ...
- collections,random
collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...
- Jenkins入门教程
Jenkins入门教程 @ 目录 Jenkins入门教程 1. 什么是Jenkins 1.1 我们为啥需要jenkins 1.2. Jenkin实现原理 2. Jenkins搭建 2.1. Jenki ...
- chm打开看不到内容时好时坏
右击chm文件,属性====>解除锁定 再打开 ok
- f5 http和tcp_80 monitor
f5上的http和tcp_80 monitor是有区别的.假如使用http为monitor,即使80端口是通的,但是有的情况f5也会根据http的访问返回值情况判断站点不可用. 如, telnet I ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 原型和原型链
JavaScript 原型和原型链 在阅读本文章之前,已经默认你了解了基础的 JavaScript 语法知识,基础的 ES6 语法知识 . 本篇文章旨在为 JavaScript继承 打下基础 原型 在 ...
- STM32通过rosserial接入ROS通讯开发
作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 前言 主题:串口是一种设备间常用的通讯接口,rosserial将串口字符数据转发到标准ROS网络,并输出到rosout和其日志文件.本文将 ...
- HDU2065 "红色病毒"问题 【组合数学 二项式定理】
HDU2065 "红色病毒"问题 Description: 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色 ...
- AtCoder Beginner Contest 179 E - Sequence Sum (模拟)
题意:\(f(x,m)\)表示\(x\ mod\ m\),\(A_{1}=1\),而\(A_{n+1}=f(A^{2}_{n},M)\),求\(\sum^{n}_{i=1}A_{i}\). 题解:多算 ...
- 【cpp上】课后正误小题
State whether each of the following is true or false. If false, explain why. Assume the state ment u ...