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 ответов

12 просмотров
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 ...
есть компонент который должен уметь показывать кно...

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

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

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

@Aiwan что такое база образца?
Alexey
27
Не многие знают, а кто знает, тот уже успел забыть, что в далёком 2004 году эта игра произвела настоящий фурор, настолько революционной была технология, применяемая для её соз...
ICCID
4
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Короче я тут узнал полный пиздец Что кучу постов которые я создавал через posted Спустя время не могу редактировать и менять Мол телега возвращае ошибку Это реально так ...
inc.
13
Хотя у меня сейчас есть более сложная задача, вот её думаю: как объяснить челу переходного возраста противоположного полу, обучающегося в польском колледже (а-ля наш техникум)...
Вячеслав Кузьменко
15
а сколько всего в IT умерло? Где флеш-игры, их было туча, где они все? Сегодня технология есть, а завтра вжух и мёртвая. Этот wasm сильно напоминает джавовские апплеты, silver...
Constantin F.
5
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
30
а вы в курсе, что Initialize() не работает? var arr123: array[0..123] of Byte; ... Initialize(arr123, SizeOf(arr123));
Iluha Companets
8
что читать по делфи?вообще 0 в нем
fd dsds
9
верно что я могу удалить эти addq и subq т.к. со стеком никакого взаимодействия нет (исключая call)?
Michael
16
Карта сайта