вывод компонентов reactjs

188
08 мая 2019, 21:50

Прохожу курс "Основы React.js", 9 часть - "Жизненный цикл React-компонентов"(1 мин 30 сек). Вопрос следующий: имеется два компонента article и ArticleList. Первый представляет статью , а второй вывод всех статей. Стоит задача при выводе статей открыть только первую статью, автор добавляет параметр index и передает значение в параметр deafultOpen = {index === 0}и получается при загрузке страницы открывается только первая статья , остальные закрыты (Код приведу ниже). Откуда параметр index берет значение чтобы сравнить его с 0? Или каким образом работает вся эта система?

// Статья 
class Article extends Component { 
    constructor(props){ 
        super(props) 
        this.state={ 
            modeClose: props.defaultOpen 
        } 
    } 
    onHandle = () => { 
        console.log('Clicked'); 
        this.setState({ 
            modeClose: !this.state.modeClose 
        }) 
    } 
    render() { 
        const {article} = this.props; 
        const body = this.state.modeClose && <section className="card-text">{article.text}</section>; 
        return ( 
            <div className="card mx-auto" style={{}}> 
                <div className="card-header"> 
                <h2 className="d-inline-block">{article.title}</h2> 
                <button onClick={this.onHandle} className="btn btn-primary btn-lg float-right">Close</button> 
                </div> 
                <div className="card-body"> 
                    <h6 className="text-muted card-text"> creation date: {(new Date(article.date)).toDateString()}</h6> 
                    {body} 
                </div> 
                </div> 
        ) 
    } 
} 
 
//Вывод компонента ArticleList 
export default function articleList({articles}){ 
    const artcileElements = articles.map((article,index) => <li className="article-list__li" key={article.id}><Article article= {article} defaultOpen= {index=== 0} /></li> ) 
    return <ul> 
        {artcileElements} 
    </ul> 
}

Answer 1

Метод map() создаёт новый массив с результатом вызова указанной функции для каждого элемента массива.

Функция, создающая элемент в новом массиве, принимает три аргумента:

  • currentValue Текущий обрабатываемый элемент массива.
  • index Индекс текущего обрабатываемого элемента в массиве.
  • array Массив, по которому осуществляется проход.

Справка

Поскольку индексы элементов массива нумеруются, начиная с 0, то при первой итерации переменная index примет значение 0 и проверка {index=== 0} даст результат true

READ ALSO
Видео фон на javascript.Проблема со звуком. ctrl+F5

Видео фон на javascript.Проблема со звуком. ctrl+F5

Использую этот плагин для добавления видео на сайт в фоновом режиме - https://githubcom/Victa/HTML5-Background-Video

231
Как правильно взять value от input-а и передать в React

Как правильно взять value от input-а и передать в React

есть текстовой input и button, при нажатии на button, value от inputa должен передаться компонентСейчас при каждом изменении value сохраняется в state, а при...

177
Скрыть невыбранные &lt;options&gt; из &lt;select&gt;

Скрыть невыбранные <options> из <select>

Есть две кнопки - каждая выбирает свой option из selectКак сделать, чтобы при нажатии на копку, все option, кроме выбранного, скрывались или становились...

164
CreateJS (canvas) Iframe

CreateJS (canvas) Iframe

Есть например iframe рекламного блока:

189