#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]);