按名称和日期搜索react redux tyspript中的过滤器

发布于 2025-02-06 05:21:25 字数 705 浏览 2 评论 0原文

我目前正在学习React,更具体地说是Typescript和Redux。我需要用名称和日期进行搜索过滤器。我用Antd(带钩子)的Rangepicker制作了一个日期过滤器,但我不知道如何用名字制作一个。

const [searchTerm, setSearchTerm] = useState<string[]>([]);
  <Space direction="vertical" size={12}>
    <RangePicker onChange={(dates, datesString) => {setSearchTerm(datesString)}}/>
  </Space>
  <Table 
    className='tablica' 
    columns={columns} 
    dataSource={todoHistory.filter((val) => {
      if(searchTerm.length > 0){
        if(moment(val.datum).diff(searchTerm[0]) >= 0 && 
          moment(val.datum).diff(searchTerm[1]) <= 0 ) {
          return val
        }
      }else{ return val; }
    )} 
  />

I'm currently learning about react, more specifically about typescript and redux. I need to make a search filter with name and date. I made a date filter with RangePicker by antd(with hooks), but I don't know how to make one with a name.

const [searchTerm, setSearchTerm] = useState<string[]>([]);
  <Space direction="vertical" size={12}>
    <RangePicker onChange={(dates, datesString) => {setSearchTerm(datesString)}}/>
  </Space>
  <Table 
    className='tablica' 
    columns={columns} 
    dataSource={todoHistory.filter((val) => {
      if(searchTerm.length > 0){
        if(moment(val.datum).diff(searchTerm[0]) >= 0 && 
          moment(val.datum).diff(searchTerm[1]) <= 0 ) {
          return val
        }
      }else{ return val; }
    )} 
  />

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

满栀 2025-02-13 05:21:26

实现所需的一种方法是创建另一个状态以保持名称,该名称将用于过滤,并在todohistory.filter.filter 。

const [searchTerm, setSearchTerm] = useState<string[]>([]);
const [name, setName] = useState('');

<input value={name} onChange={(event) => setName(event.target.value)} />

<Space direction="vertical" size={12}>
  <RangePicker onChange={(dates, datesString) => {setSearchTerm(datesString)}}/>
</Space>

<Table 
  className='tablica' 
  columns={columns} 
  dataSource={todoHistory
    .filter((val) => {
      if(searchTerm.length > 0) {
        return moment(val.datum).diff(searchTerm[0]) >= 0 &&
               moment(val.datum).diff(searchTerm[1]) <= 0;
      }
    
      return true;
    })
   .filter((val) => {
      /* replace val.name with your attribute name */
      return val.name.includes(name);
    })
  } 
/>

请注意,我已将第一个过滤器的实现更改为返回boolean,因为它更准确地使用了filter期望返回的内容。

One way to achieve what you need is by creating another state to hold the name that will be used to filter, and use it in the todoHistory.filter.

const [searchTerm, setSearchTerm] = useState<string[]>([]);
const [name, setName] = useState('');

<input value={name} onChange={(event) => setName(event.target.value)} />

<Space direction="vertical" size={12}>
  <RangePicker onChange={(dates, datesString) => {setSearchTerm(datesString)}}/>
</Space>

<Table 
  className='tablica' 
  columns={columns} 
  dataSource={todoHistory
    .filter((val) => {
      if(searchTerm.length > 0) {
        return moment(val.datum).diff(searchTerm[0]) >= 0 &&
               moment(val.datum).diff(searchTerm[1]) <= 0;
      }
    
      return true;
    })
   .filter((val) => {
      /* replace val.name with your attribute name */
      return val.name.includes(name);
    })
  } 
/>

Note that I've changed the implementation of the first filter to return a boolean, as it is more accurate with what the filter is expecting to be returned. filter docs

捂风挽笑 2025-02-13 05:21:26

我设法通过使用效果挂钩解决了这个问题,并创建了另一个状态。
因此,我创建了另一个状态:

const [searchText, setSearchText] = useState('');
  

然后使用效果挂钩:

    useEffect(() => { console.log(searchText);
setTodoHistory(todoHistory.filter((todoItem) => {
    if(todoItem.naziv?.toLowerCase().includes(searchText.toLowerCase())){
      return todoItem;
    }
}))

},[searchText]);

然后我做了一个输入:

   <Input className="search-text" placeholder='Search...' type='text' onChange={event => {setSearchText(event.target.value)}}/>

I managed to solve this problem through useEffect hook and creating another state.
So I created another state:

const [searchText, setSearchText] = useState('');
  

And then useEffect hook:

    useEffect(() => { console.log(searchText);
setTodoHistory(todoHistory.filter((todoItem) => {
    if(todoItem.naziv?.toLowerCase().includes(searchText.toLowerCase())){
      return todoItem;
    }
}))

},[searchText]);

And then I made an Input:

   <Input className="search-text" placeholder='Search...' type='text' onChange={event => {setSearchText(event.target.value)}}/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文