Reactjs 子组件的筛选数组

Reactjs 子组件的筛选数组,reactjs,Reactjs,在父组件中,我有一个子组件的状态数组: const [myList, setMyList] = useState([]); setMyList([ <MyComponent color='blue' /> <MyComponent color='blue1' /> <MyComponent color='blue2' /> <MyComponent color='red' /> ]) 有时,我可能会在列表中有大量

在父组件中,我有一个子组件的状态数组:

const [myList, setMyList] = useState([]);

setMyList([
    <MyComponent color='blue' />
    <MyComponent color='blue1' />
    <MyComponent color='blue2' />
    <MyComponent color='red' />
])
有时,我可能会在列表中有大量的项目,并且希望有一个搜索框对输入框中的名称执行myList.filter

我有类似的东西

const itemsToHide = myList.filter(item => !item.props.color.includes(e.target.value));
这将正确地为我提供与搜索不匹配的项目


现在有没有办法将这些项目的“显示”设置为“无”?或者以另一种不会卸载它们的方式隐藏它们,因为当我清除搜索框时,我希望它们仍然存在。

是否有理由将它们放在另一个数组中?仅检查渲染器内部的条件可能更容易。将组件包装到另一个div中

myList.mapitem=>{ const isVisible=item.props.name.includeSearchTerm; 回来 {item} }
或者传递道具并以相同的方式渲染组件。不过,别忘了为所有div添加一个唯一的键。

是否有理由将它们放在另一个数组中?仅检查渲染器内部的条件可能更容易。将组件包装到另一个div中

myList.mapitem=>{ const isVisible=item.props.name.includeSearchTerm; 回来 {item} }
或者传递道具并以相同的方式渲染组件。不过,不要忘记为所有div添加唯一键。

只需渲染满足条件的项:

myList
 .filter(item => item.name.includes(searchText))
 .map((item) => 
       (<div key={item.props.id}>
          {item}
       </div> 
  ))

只渲染满足条件的项目:

myList
 .filter(item => item.name.includes(searchText))
 .map((item) => 
       (<div key={item.props.id}>
          {item}
       </div> 
  ))

我建议不要将组件置于状态@gmoniava啊。。。。实际上,我花了很长时间到处寻找一些关于常见构建模式的文章,希望找到您刚才链接的内容。我找不到任何东西,所以我打开了一个新的分支,将文章描述的内容转换为我已经写过的内容,恰巧是我在这里提出的要求。我建议不要将组件置于状态@gmoniava啊。。。。实际上,我花了很长时间到处寻找一些关于常见构建模式的文章,希望找到您刚才链接的内容。我找不到任何东西,所以我打开了一个新的分支,将文章描述的内容转换为我已经编写的内容,这与我在这里提出的问题不谋而合。这不起作用,因为我需要装载所有项目,过滤后,它们仍需保持装载状态。每次searchText更改时,组件都会呈现,过滤器将根据searchText值应用。你试过了吗?是的,我喜欢这种方法,我对我的一个过滤器这样做,但对另一个过滤器不这样做,因为我只在父组件的useEffect with[]依赖项数组中加载一次项。嗯,我想我可以将searchText放入loading useEffect的依赖项数组中,以便它在文本更改后再次加载项目。这不起作用,因为我需要装载所有项目,并且在过滤后它们仍需要保持装载状态。每次searchText更改时,组件都会呈现,过滤器将根据searchText值应用。你试过了吗?是的,我喜欢这种方法,我对我的一个过滤器这样做,但对另一个过滤器不这样做,因为我只在父组件的useEffect with[]依赖项数组中加载一次项。嗯,我想我可以把searchText放在loading useffect的依赖数组中,这样在文本更改后它就可以再次加载这些项了