首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用函数组件以编程方式过滤,无法获取Filter - react-bootstrap-table-2

使用函数组件以编程方式过滤,无法获取Filter - react-bootstrap-table-2
EN

Stack Overflow用户
提问于 2020-02-04 18:53:54
回答 1查看 297关注 0票数 2

我试图在一个函数组件中使用react bootstrap table 2实现一个自定义过滤器,但是当我使用getFilter函数访问该过滤器时,setFilter不起作用,filter.text仍然为空

代码语言:javascript
复制
const ExempleTable = () => {
  const [filter, setFilter] = useState({ text: null });

  const columns = [{
    dataField: 'text',
    text: 'Text',
    filter: textFilter({
      getFilter: (textFilter) => setFilter({ text: textFilter }),
    })
  }];

  const setTextFilter = (e) => filter.text && filter.text(e.currentTarget.value);

  return (
    <>
      <input onChange={setTextFilter} />
      <BootstrapTable
        filter={filterFactory()}
        data={[{ text: "Je suis un test"}]}
        columns={columns}
      />
    </> 
  );
}

在这里,即使在setFilter之后,filter.text也始终为null。有没有可能这样做并让它工作呢?有没有办法在function组件中以编程方式进行筛选?

EN

回答 1

Stack Overflow用户

发布于 2020-09-17 05:56:44

据我所知,getFilter旨在获得对react-bootstrap-table-2,实现的过滤器的访问权限,而不是覆盖它。所以,如果你这样做:

代码语言:javascript
复制
const columns = [{
    dataField: 'text',
    text: 'Text',
    filter: textFilter({
      getFilter: (textFilter) => { this.setFilter = textFilter; },
    })
  }];

然后,您可以稍后使用此setFilter函数以编程方式设置列过滤器,方法是像这样调用该函数:

代码语言:javascript
复制
invokeFilterFunction = (e) => {
    this.setFilter(e.currentTarget.value);
}

return (
  <>
    <input onChange={invokeFilterFunction} />
    <BootstrapTable
      filter={filterFactory()}
      data={[{ text: "Je suis un test"}]}
      columns={columns}
    />
  </> 
  );

如果您想覆盖列过滤函数,我认为您应该使用onFilter。根据Storybook,您可以定义自己的过滤函数,如下所示:

代码语言:javascript
复制
  myOwnFirstFilter = (filterVal, data) => {
    if (filterVal) {
      return data.filter(text => text && text.indexOf(filterVal) !== -1);
    }
    return data;
  }

然后,在列中设置过滤器,如下所示:

代码语言:javascript
复制
const columns = [{
    dataField: 'text',
    text: 'Text',
    filter: textFilter({
      onFilter: this.myOwnFirstFilter,
    })
  }];
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60055803

复制
相关文章

相似问题

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