Для цикла сгенерируйте строки и добавьте счетчик в jsx

Я хочу создавать строки (например, 10 строк) с помощью цикла внутри JSX. А также счетчик внутри одного из элементов в строке, который покажет индекс строки.

<Grid container>
    <GridItem xs = {3} sm = {3} md = {3}>
       Key {counterOfRowIndex}
    </GridItem>
    <GridItem xs = {7} sm = {7} md = {7}>
       <input type = "text"/>
    </GridItem>
    <GridItem xs = {2} sm = {2} md = {2}>
       <FormControlLabel
          control = {
            <Checkbox
               checked = {this.state.checked}
               onChange = {this.handleChangeEventCheck('checked')}
               value = {checked}
            />
          }
       />
    </GridItem>
</Grid>

http://prntscr.com/m6f2rn

Это мой ожидаемый результат

Используйте что-то вроде этого {Array(10).map((_, index) => <RowComponent key = {index} />)} и инкапсулируйте одну строку в соответствующий компонент.

Christian Ivicevic 13.01.2019 00:10

@ChristianIvicevic спасибо за ответ! Я пробовал то же решение раньше, чем вы ответили, но оно не работает. Не уверен, что я где-то ошибся

Trence Teny 13.01.2019 00:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
192
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вместо цикла for вы можете использовать метод .map(), который будет генерировать новый массив элементов, используя элемент из существующего массива.

Вы можете сделать что-то вроде

<Grid container>
    yourArray.map((item, index) => {
        return(
           <GridItem xs = {3} sm = {3} md = {3}>
                Key {index + 1}
           </GridItem>
           <GridItem xs = {7} sm = {7} md = {7}>
                <input type = "text"/>
           </GridItem>
           <GridItem xs = {2} sm = {2} md = {2}>
           <FormControlLabel
               control = {
            <Checkbox
               checked = {this.state.checked}
               onChange = {this.handleChangeEventCheck('checked')}
               value = {checked}
            />
          }
          />
           </GridItem>
     )
    })
</Grid>
Ответ принят как подходящий

Вы можете попробовать это:

const arrayOfNumbers = Array.from(Array(10).keys());
<Grid container>
  {arrayOfNumbers.map(currentVal => 
     <React.Fragment>
       <GridItem xs = {3} sm = {3} md = {3}>
           Key {currentVal}
        </GridItem>
        <GridItem xs = {7} sm = {7} md = {7}>
           <input type = "text"/>
        </GridItem>
        <GridItem xs = {2} sm = {2} md = {2}>
           <FormControlLabel
              control = {
                <Checkbox
                   checked = {this.state.checked}
                   onChange = {this.handleChangeEventCheck('checked')}
                   value = {checked}
                />
              }
           />
        </GridItem>
     <React.Fragment>
  )}
</Grid>

Итак, у вас есть другие правильные ответы, но вот способ визуализировать эти строки с немного большей структурой. По сути, то же самое, что и другие, но приближает то, что вы пытаетесь сделать, к вашей цели.

class Row extends React.Component {
    render () {
        return (
            <React.Fragment>
                <GridItem
                    xs = {3}
                    sm = {3}
                    md = {3}
                    key = {`col-1`}>
                    {this.props.children}
                </GridItem>
                <GridItem
                    xs = {7}
                    sm = {7}
                    md = {7}
                    key = {`col-2`}>
                    <input type = "text" />
                </GridItem>
                <GridItem
                    xs = {2}
                    sm = {2}
                    md = {2}
                    key = {`col-3`}>
                    <FormControlLabel
                        control = {
                            <Checkbox
                                checked = {this.state.checked}
                                onChange = {this.handleChangeEventCheck}
                                value = {checked}
                            />
                        }
                    />
                </GridItem>
            </React.Fragment>
        );
    }

    handleChangeEventCheck = index => {
        return this.props.onChangeCheck(index);
    }
}

class Table extends React.Component {
    render () {
        const rows = Array.from(Array(10).keys());

        // This below expects `this.handleChangeEventCheck('checked')` to return a new function accepting the row index as its param.
        const rowEls = rows.map(( row, i ) => (
            <Row
                key = {`row-${i}-${row}`}
                onChangeCheck = {this.handleChangeEventCheck('checked')}>
                Key {i}
            </Row>
        ));

        return (
            <Grid container>
                {rowEls}
            </Grid>
        );
    }
}

Другие вопросы по теме