#javascript #reactjs #ecmascript-6 #material-ui #react-hooks
#javascript #reactjs #ecmascript-6 #материал-пользовательский интерфейс #реагирующие хуки
Вопрос:
Я хотел получить как можно меньше кода, поэтому я внедрил в свое приложение повторно используемый компонент. Моя проблема в том, как я могу выполнить итерацию столбцов и строк в Grid
, Card
и Table
. Что будет лучшим решением для этого?
Пожалуйста, проверьте мой codesandbox
Ожидаемый результат
Код
<Grid container spacing={2}>
{rows.map((row, index) => (
<Grid item md={4} sm={6} xs={12} key={index}>
<CardComponent columns={columns} rows={row} />
</Grid>
))}
</Grid>
Ответ №1:
Вот как я бы это сделал, не слишком сильно меняя ваш исходный код
https://codesandbox.io/s/material-demo-forked-nk293
demo.js
const columns = [
{ headerName: "ID", field: "id" },
{ headerName: "Request", field: "request" }
];
card.js
<TableCell variant="body">{row[column.field]}</TableCell>
Это «похоже» на API material-table
Комментарии:
1. Спасибо за это. Что, если бы я хотел добавить a
<Button>
, и я добавил также переменную с именем ‘dontDisplay`, которую я не хочу отображать. Пожалуйста, проверьте этот codesandbox. codesandbox.io/s/material-demo-forked-h9ji8?file=/demo.js2. Вы меняете структуру моего кода на лучшую. Спасибо
3. Итак, это
dontDisplay
не логическое значение, это строка, что она должна скрывать?4. Извините за путаницу. Пожалуйста, не обращайте внимания на
dontDisplay
. Как я могу добавить<Button>
id
туда с помощью? Это вне итерации, верно? Кстати, вы можете реструктурировать мой код5. codesandbox.io/s/material-demo-forked-xvjjy Вы можете получить доступ к идентификатору прямо там, потому что он находится в строке, надеюсь, это поможет 🙂
Ответ №2:
Вот мой ответ без изменения структуры столбцов и строк:
<TableRow>
<TableCell variant="head">{column.headerName}</TableCell>
<TableCell variant="body">
{rows[Object.keys(rows)[index]]}
</TableCell>
</TableRow>