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的更多相关文章

  1. react hooks & component will unmount & useEffect & clear up

    react hooks & component will unmount & useEffect & clear up useEffect & return === u ...

  2. React Hooks 深入系列 —— 设计模式

    本文是 React Hooks 深入系列的后续.此篇详细介绍了 Hooks 相对 class 的优势所在, 并介绍了相关 api 的设计思想, 同时对 Hooks 如何对齐 class 的生命周期钩子 ...

  3. React Hooks 实现和由来以及解决的问题

    与React类组件相比,React函数式组件究竟有何不同? 一般的回答都是: 类组件比函数式组件多了更多的特性,比如 state,那如果有 Hooks 之后呢? 函数组件性能比类组件好,但是在现代浏览 ...

  4. React Hooks总结

    Hook 前言 什么是Hook 自从 16.8 版本开始,hooks 的出现使得你可以在不编写 class 的情况下使用状态管理以及其它 React 的特性. 那么在 React Hooks 出现之前 ...

  5. [React Hooks长文总结系列一]初出茅庐,状态与副作用

    写在开头 React Hooks在我的上一个项目中得到了充分的使用,对于这个项目来说,我们跳过传统的类组件直接过渡到函数组件,确实是一个不小的挑战.在项目开发过程中也发现项目中的其他小伙伴(包括我自己 ...

  6. 谈谈react hooks的优缺点

    前言Hook 是 React 16.8 的新增特性.它是完全可选的,并且100%向后兼容.它可以让你使用函数组件的方式,运用类组件以及 react 其他的一些特性,比如管理状态.生命周期钩子等.从概念 ...

  7. react之react Hooks

    函数组件,没有 class 组件中的 componentDidMount.componentDidUpdate 等生命周期方法,也没有 State,但这些可以通过 React Hook 实现. Rea ...

  8. 你真的会用react hooks?看看eslint警告吧!(如何发请求、提升代码性能等问题)

    前言 看过几个react hooks 的项目,控制台上几百条警告,大多是语法不规范,react hooks 使用有风险,也有项目直接没开eslint.当然,这些项目肯定跑起来了,因为react自身或者 ...

  9. 关于React Hooks,你不得不知的事

    React Hooks是React 16.8发布以来最吸引人的特性之一.在开始介绍React Hooks之前,让咱们先来理解一下什么是hooks.wikipedia是这样给hook下定义的: In c ...

随机推荐

  1. SDS——动态字符串

    Redis中简单动态字符串sds数据结构与API相关文件是:sds.h, sds.c. SDS本质上就是char *,因为有了表头sdshdr结构的存在,所以SDS比传统C字符串在某些方面更加优秀,并 ...

  2. 一个基于protocol buffer的RPC实现

    Protocol Buffer仅仅是提供了一套序列化和反序列化结构数据的机制,本身不具有RPC功能,但是可以基于其实现一套RPC框架. Services protocol buffer的Service ...

  3. 【Source Insight】查找功能 Lookup References 详解

    1.Options Case Sensitive //区分大小写 Whole Words Only //全字匹配查找 Skip Inactive Code //跳过无效代码查找 Skip Commen ...

  4. KMP算法 字符串匹配(看猫片)

    前言 此篇笔记根据自己的理解和练习心得来解释算法,只代表个人观点,如有不足请指出(我刚学QWQ) 浅谈字符串匹配 设想一个场景,假设你是一个净化网络语言环境的管理员,每天需要翻阅大量的文章和帖子来查找 ...

  5. HTML5 使用浏览器内置数据库之 indexedDB

    indexedDB是H5规范里的浏览器内置数据库,是nosql数据库的一种.因为另一种数据库Web SQL不再受W3C支持,所以还得学习下这个. 基本情况 兼容性:ie11及以上都支持, W3C是这么 ...

  6. SpringCloud配置中心实战

    SpringCloud配置中心实战 1.统一配置中心(Config) 1.1 Spring项目配置加载顺序 1.2 配置规则详解 1.3 Git仓库配置 1.3.1 使用占位符 1.3.2 模式匹配 ...

  7. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  8. log工具类

    package com.pt.platform.core.common; import java.text.SimpleDateFormat; import java.util.Date; impor ...

  9. Kubernetes --(k8s)Job、CronJob

    Job https://www.kubernetes.org.cn/job https://www.kubernetes.org.cn/cronjob Job负责批量处理短暂的一次性任务 (short ...

  10. python--基础3(流程语句)

    资源池 链接:https://pan.baidu.com/s/1OGq0GaVcAuYEk4F71v0RWw 提取码:h2sd 本章内容: if判断语句 for循环语句 while循环语句 break ...