React - биндинг и ключи

535
24 ноября 2016, 10:31

Есть два терзающий вопроса:

  1. Есть кусок кода рендера

    var data = this.props.data;
        var hidden = this.state.hidden;
        var template = data.map(function(item,index) {
        return(
            <div className="mainDiv" key="{index}">
                <p className="feedText">{item.author}</p>
                <p className={'feedText ' + 'smallmargin'}>{item.text}</p>
                <p className={'feedText ' + 'smallmargin ' + (hidden ? '' : 'hidden')}>{item.bigtext}</p>
            </div>
        )
    });
    

    Реакт отказывается рендерить по причине {index} используется дважды,должен быть уникален,но значение индекса ведь разные - 0 и 1. Как быть в такой ситуации?

  2. Как привязать событие? Есть событие

    divClick : function(e) {
        e.preventDefault();
        this.setState({hidden : true});
    }
    

    Банальный онклик говорит,что divClick undefined

    <div className="mainDiv" onClick={this.divClick}>
    

В чем тут проблемы?

Answer 1

По вопросу 1, это ваша опечатка:

Вы написали:

key="{index}"

Соответственно ключом становится строка. Фигурные скобки внутри строки в jsx-это просто фигурные скобки, то что внутри них не является js-выражением.

Надо:

key={index}

Ну или key = {index.toString()} если вам прямо так уж строка нужна(нет не нужна)

По вопросу 2, при правильном использовании должно работать.
Приведите весь код компонента. То есть весь кусок в котором не работает, целиком. Мой хрустальный шар предполагает, что Вы теряете контекст (this) в методе .map
Попробуйте так:

var template = data.map(function(item,index) {/** где-то здесь мы вызываем this.divClick **/}.bind(this))

Подробнее про контекст почитать можно например в ответах к этому вопросу.

READ ALSO
строки DOM таблицы

строки DOM таблицы

Есть вот такой скрипт, по нажатию кнопки, создает строку таблицы, возможно ли сделать чтобы генерируемый имел ввид к примеруСуть в том чтоя...

433
Не срабатывает оператор else. (Javascript)

Не срабатывает оператор else. (Javascript)

При выполнении лабораторной работы возникла вот такая проблемаПервое поле задаёт нижнюю границу диапазона чисел, а второе - верхнюю

378
Сохранение сгенерированной страницы html

Сохранение сгенерированной страницы html

У меня есть страница с кучей JS скроптов(загрузка изображения, динамическая таблица, блоки которые перемещаются мышкой)Суть такая пользователь...

570
А возможно ли создавать файлы с помощью JavaScript?

А возможно ли создавать файлы с помощью JavaScript?

Мне бы хотелось бы узнать, а возможно ли создавать файлы с помощью JavaScript? Если да, пожалуйста, приведите примерыБуду очень рад вашему ответу

441