#reactjs
Вопрос:
У меня есть эта вложенная карта, которая медленно отображается после перенаправления, я попытался отобразить только группу, и это было действительно быстро, есть идеи, как избавиться от этой вложенности, но достичь тех же результатов? также может вызвать функцию внутри return, вызывающую это падение…..
itemSet = [
{ id: 1, group: 'A', item : 'someitem' },
{ id: 2, group: 'A', item : 'someitem' },
{ id: 3, group: 'B', item : 'someitem' },
{ id: 4, group: 'B', item : 'someitem' },
]
const groupItems = (items) =>
items.reduce((group, items) => {
if (!group[items.group]) {
group[items.group] = [];
}
group[items.group].push(items);
return group;
}, {});
const items = (item) =>
Object.entries(groupItems(item)).map(([group, items]) => (
<React.Fragment>
<group name={group} />
{items.map((item) => (
<item
key={item.id}
id={item.id}
item={item.item}
/>
))}
</React.Fragment>
));
return (
<MuiThemeProvider theme={themeDark}>
<AppBar />
<CssBaseline />
{items(itemSet)}
</MuiThemeProvider>
);
Ответ №1:
Я полагаю, что ваш способ использования заключается в отображении массива массива, сгруппированного по group
. Вам придется использовать вложенные циклы, но key
в первой карте отсутствует атрибут. Попробуйте добавить key
туда в React.Fragment
.
const items = (item) =>
Object.entries(groupItems(item)).map(([group, items]) => (
<React.Fragment key={group}>
<group name={group} />
{items.map((item) => (
<item
key={item.id}
id={item.id}
item={item.item}
/>
))}
</React.Fragment>
));
return (
<MuiThemeProvider theme={themeDark}>
<AppBar />
<CssBaseline />
{items(itemSet)}
</MuiThemeProvider>
);
Рабочий пример для codesandbox
Комментарии:
1. вы думаете, что это вызывает падение ? тбх, я попробовал, это вроде как улучшилось…
2. Да, это одна из причин, и есть еще одна. Вы используете не 2 цикла, а 3, включая
Object.entries
. Можете привести рабочий пример codesandbox. Я могу проверить и помочь вам там с несколькими циклами.3. ссылка вроде похожая
4. Обновил пример. codesandbox.io/s/ancient-dust-uxq5c?file=/index.js Не фанат
for...in
, но это сокращает один цикл здесь.