待办事项列表应用程序中搜索字段文本中的每个更新的条件渲染

Posted

技术标签:

【中文标题】待办事项列表应用程序中搜索字段文本中的每个更新的条件渲染【英文标题】:Conditional rendering with every Update in text of search-field in a Todo List App 【发布时间】:2021-11-04 00:15:23 【问题描述】:

我有一个反应待办事项列表,当应用程序首次加载时,我会显示一个组件数组,每当用户在搜索字段中输入一些字符串时,我希望进行 正则表达式比较并有条件地呈现 只有那些匹配的组件......

我的 UI 可能会给你一个更好的主意,看看...

我希望如果我输入Al,则应该只显示Alomond 而不应该显示Buy milk, Buy toast...

这是我的正则表达式比较的代码...

var searchRegex = new RegExp("/" + searchValue + "/gt");
      console.log("--------------------------------", searchValue);

      let tempitems = items.filter(
        (item) => item.title.search(searchRegex) != -1
      );
      let tempdeletedItems = deletedItems.filter(
        (item) => item.title.search(searchRegex) != -1
      );
      setContent(
        <div>
          tempitems.map((item) => (
            <ToDoPane
              item=item
              delFunc=deleteItem
              done=addToDeletedItems
              edit=editItem
            />
          ))
          <div className="doneWalaDiv">
            tempdeletedItems.map((item) => (
              <ToDoPane
                item=item
                delFunc=deleteFromDeletedItems
                done=addItem
                edit=editItem
                type="checked"
              />
            ))
          </div>
        </div>
      );

????如何有条件地渲染以下代码???

你可以在这里查看完整的基础组件???? https://pastebin.com/VWk0tEDq

【问题讨论】:

【参考方案1】:

您可以使用输入的反应状态并根据更新的状态过滤项目,代码应如下所示:

export default function CentralPane() 
    const [textInput, setTextInput] = useState('');
    
    
    return (
        <div>
            items
               .filter(i => i.startsWith(textInput))
               .map(i => (<div></div>))
        </div>
    );

【讨论】:

【参考方案2】:

您可以在render 中过滤结果。

如果 items 是一个字符串数组,它应该如下所示。

export default function CentralPane() 
    const [searchValue, setSearchValue] = useState(''); // the value of your input text

    return (
        <ul>
        items.filter(item => item.match(searchValue)).map(filteredItem => (
            <li>item</li>
        ))
        </ul>
    );

【讨论】:

【参考方案3】:
const [searchValue, setsearchValue] = React.useState("");
const handleChange = (val) => 
    setsearchValue(val);
  ;
  useEffect(() => 
    display(searchValue);
  , [searchValue]);


  function display(searchValue) 
    if (searchValue === '') 
      return <div>
      items.map((item) => (
        <ToDoPane
          item=item
          delFunc=deleteItem
          done=addToDeletedItems
          edit=editItem
        />
      ))
      <div className="doneWalaDiv">
        deletedItems.map((item) => (
          <ToDoPane
            item=item
            delFunc=deleteFromDeletedItems
            done=addItem
            edit=editItem
            type="checked"
          />
        ))
      </div>
    </div>;
     else 
      // var searchRegex = new RegExp(searchValue);
      // searchRegex+='gi';
      // console.log('regex ye nikal ke aya h ',searchRegex);

      let tempitems = items.filter(
        (item) => item.title.search(searchValue)!=-1
      );
      let tempdeletedItems = deletedItems.filter(
        (item) => item.title.search(searchValue)!=-1
      );
      console.log('Ye sab filter hua saman h',tempitems,tempdeletedItems);
      return <div>
      tempitems.map((item) => (
        <ToDoPane
          item=item
          delFunc=deleteItem
          done=addToDeletedItems
          edit=editItem
        />
      ))
      <div className="doneWalaDiv">
        tempdeletedItems.map((item) => (
          <ToDoPane
            item=item
            delFunc=deleteFromDeletedItems
            done=addItem
            edit=editItem
            type="checked"
          />
        ))
      </div>
    </div>;
    
  

上面的代码可以用来有条件地渲染React组件的return()块中的函数display()

只需在返回的return 部分内进行一个简单的 JSX 函数调用,如下所示:

display(searchValue)

就是这样。 useEffect() 钩子会自动调用 React dom 来重新渲染组件。

【讨论】:

以上是关于待办事项列表应用程序中搜索字段文本中的每个更新的条件渲染的主要内容,如果未能解决你的问题,请参考以下文章

NSDocument 用于关系数据/待办事项列表?

如何使用React删除待办事项列表中的项目

如何根据优先级升序排列待办事项列表

复制所有活动而不是 [仅复选框和文本](待办事项列表 android 应用程序)

如何将列添加到 Azure 演示 iOS 应用程序的简易表(待办事项列表)

Drupal 视图和待办事项列表