Как отфильтровать массив по одному условию без средства повторной визуализации?

#reactjs

#reactjs

Вопрос:

Как отфильтровать массив по одному условию без средства повторной визуализации?

Я хочу отобразить кнопку, если результат проверки возвращает true , но дело в том, что true или false возвращается на каждой итерации, как я могу вернуть true или false только один раз?

   const [checkStatus, setCheckStatus] = useState<boolean>(false);

  const statusChecker = () => {
    const result = items.map(
      item =>
        item.status !== 'red' amp;amp; item.status === 'yellow',
    );
    const [check] = resu<
    if (check) setCheckStatus(check);
  };

return (
 {checkStatus amp;amp; (
  <Button>Click me</Button>
 )}
)
  

введите описание изображения здесь

Комментарии:

1. Может быть, вы ищете items.find ? Он вернет первый объект, соответствующий предикату, или undefined если ни один из них не соответствует.

2. как statusChecker вызывается?

Ответ №1:

Я рекомендую вам использовать useMemo , если вы не передаете никаких зависимостей при первом рендеринге, он просто вызывает один раз и возвращает нужный вам результат, и вы можете использовать filter функцию более высокого порядка, чтобы найти, какой элемент item.status === "yellow"

 const checkStatus = useMemo(() => {
  return items.filter(
    item => item.status !== "red" amp;amp; item.status === "yellow"
  );
}, []);
  

если вы передаете зависимость items , она будет вызываться при изменении элементов, например:

 const checkStatus = useMemo(() => {
  return items.filter(
    item => item.status !== "red" amp;amp; item.status === "yellow"
  );
}, [items]);