首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-table onFetchData被触发两次

React-table onFetchData被触发两次
EN

Stack Overflow用户
提问于 2019-06-08 18:51:56
回答 1查看 1.5K关注 0票数 1

我在项目中使用了react-table。不知道为什么react-table的onFetchData方法会被调用两次。

我将defaultFiltered设置为,

代码语言:javascript
复制
     defaultFiltered={[
          {
            id: 'status',
            value: this.getFilterValue(),
          }
      ]}

和我的OnFetchData方法如下:

onFetchData = (props) => { this.request = this.getData(props); }

react-table部分如下:

代码语言:javascript
复制
<ReactTable
      manual
      minRows = {1}
      getTdProps={this.onRowClick}
      onFetchData={this.onFetchData}
      data={!loading ? comparison.results : []}
      sortable={true}
      defaultSorted={[{
        id: 'deviation',
        desc: true,
      }]}
      filterable={showfilter === 1}
      defaultFiltered={[{
        id: 'status',
        value: this.props.statusFilter,
      }]}
      showPagination = {true}
      pages={comparison.metadata.totalPages}
      showPageSizeOptions = {true}
      pageSizeOptions = {[10, 15, 20, 25, 50, 100]}
      defaultPageSize={10}
      columns={this.getColumns}
 />
EN

回答 1

Stack Overflow用户

发布于 2019-11-14 21:40:06

我的解决方案是:声明一个fetchData状态:

代码语言:javascript
复制
const [fetchState, setFetchState] = useState(null);

执行深度相等比较,以避免多个动作调用

代码语言:javascript
复制
onFetchData={useCallback(({ page: nextPage, pageSize, sorted }) => {
      const nextFetch = { page: nextPage, pageSize, sorted };
      const prevFetch = fetchState;

      if (!deepEqual(nextFetch, prevFetch)) {
        setFetchState(nextFetch);
        onFetchData(nextFetch);
      }
    }, [fetchState, setFetchState])}

为了方便起见,我还发布了我的deepEqual定义:

代码语言:javascript
复制
const deepEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56505677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档