169 похожих чатов

Подскажите как посчитать реальное кол-во children–ов при условии что если

среди children-ов есть
- фрагмент
- компонент который возвращает фрагмент

то нужно учесть кол-во его children-ов (интересует 1 уровень вложенности)


import type { ReactNode } from 'react';
import { Children, isValidElement, cloneElement } from 'react';
import { isFragment } from 'react-is';

/* Returns React children into an array, flattening fragments. */
export function flattenChildren(
children: ReactNode,
depth = 0,
keys: (string | number)[] = [],
): ReactNode[] {
return Children.toArray(children).reduce((acc: ReactNode[], node, nodeIndex) => {
if (isFragment(node)) {
acc.push.apply(
acc,
flattenChildren(node.props.children, depth + 1, keys.concat(node.key || nodeIndex)),
);
} else if (isValidElement(node)) {
acc.push(
cloneElement(node, {
key: keys.concat(String(node.key)).join('.'),
}),
);
} else if (typeof node === 'string' || typeof node === 'number') {
acc.push(node);
}
return acc;
}, [] as any);
}


Этот код учитывает фрагменты в качестве children-ов но если передан компонент который возвращает фргамент то не посчитает.
Подскажите какие варианты у меня есть?
Посчитает если компонент вызвать {SomComponent(props)}
но это не дело

Спасибо

17 ответов

25 просмотров
Znacovean-Simion ... Автор вопроса

есть у кого идеи?

Znacovean Simion ...
есть у кого идеи?

какую проблему решаешь?

Znacovean-Simion ... Автор вопроса

есть компонент который должен уметь показывать кнопку показать ещё и обрезать количество отображаемых детей до заданного через пропс кол-ва если напрямую список кормить то норм если он вынесен в компонент который разумеется возвращает фрагмент так как иначе никак, то проблема ...

Znacovean-Simion ... Автор вопроса
Илюша 🎂
можно песочницу?

https://codesandbox.io/embed/frosty-chaum-my41yk?file=/src/App.tsx&codemirror=1 вместо <Items/> если вызвать {Items({})} только так будет считать

Znacovean-Simion ... Автор вопроса
R ZHUKOV ZHUKOV
прокинь во врапер реф и считай чилдренов

не совсем понимаю идею можно пример кода?

Znacovean Simion ...
есть компонент который должен уметь показывать кно...

А если делать проверку, если фрагмент, то брать его чилдрены

Znacovean Simion ...
не совсем понимаю идею можно пример кода?

что именно не понятно? как реф прокинуть?

Znacovean-Simion ... Автор вопроса
Стас
А если делать проверку, если фрагмент, то брать ег...

так проверка на фрагмент не сработает так как передан компонент который возвращает фрагмент с фрагментами то проблем нету

Znacovean-Simion ... Автор вопроса
R ZHUKOV ZHUKOV
что именно не понятно? как реф прокинуть?

непонятно кому его прокидывать враппер это самодостаточный компонент для многоразового юза на одной странице с разными чилдренами

ну ты попробуй, а потом утверждай

Znacovean-Simion ... Автор вопроса
R ZHUKOV ZHUKOV
ну ты попробуй, а потом утверждай

ты убеждаешь меня что через реф children мне посчитает другое кол-во? нет же если компонент 1 передан в качестве чилдрена он и вернёт 1 а мне надо в случае если этот компонент возвращает фрагмент, то зафлетить его

Znacovean Simion ...
ты убеждаешь меня что через реф children мне посчи...

https://codesandbox.io/s/react-typescript-forked-qu3g0m?file=/src/App.tsx ну или может я не правильно понял условие задачи

Znacovean-Simion ... Автор вопроса
R ZHUKOV ZHUKOV
https://codesandbox.io/s/react-typescript-forked-q...

я так понимаю эту задачу решить можно только если компонент будет клиентским? потому что в useEffect ты чекаешь реальное кол-во чилдренов?

Znacovean Simion ...
есть компонент который должен уметь показывать кно...

Ну можно такой вариант попробовать... вместо того что-бы передавать уже готовый список, можно передавать данные в виде например массива и функцию рендер, для элемента тогда можно выводить чисто например первые несколько элементов массива (ну сколько там через пропс задано) и для отрисовки каждого элемента использовать функцию рендер

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта