Реакция включает onClick в диапазон

#javascript #html #reactjs

#javascript #HTML #reactjs

Вопрос:

Я хотел бы включить опцию onClick в свой span.

У меня есть следующий метод, который возвращает диапазон

 setCondition = () => {
    const condition = this.props.condition;
    if(condition) {
        return (
            <div className="hidden-xs">
                <span className="fa fa-thumbs-up fa-2x" style={{ backgroundColor: 'green' }} />
                <span className="fa fa-thumbs-down fa-2x" />
            </div>
        );
    } else {
        return (
            <div className="hidden-xs">
                <span className="fa fa-thumbs-up fa-2x" />
                <span className="fa fa-thumbs-down fa-2x" style={{ backgroundColor: 'red' }} />
            </div>
        );
    }
}
 

Я хотел бы добавить метод ниже, когда я нажимаю на один из span.

 const update = (cond) => {
   console.log(cond);
}
 

Я пытался сделать:

 <span onClick={this.update(true)} className="fa fa-thumbs-up fa-2x" style={{ backgroundColor: 'green' }} />
 

Но при щелчке ничего не происходит.

Ответ №1:

Не вызывайте функцию this.update(true) во время привязки. Привязать только функцию без вызова like this.update .

 <span onClick={this.update} className="fa fa-thumbs-up fa-2x" style={{ backgroundColor: 'green' }} />
 

Проверьте пример в документации React .


Или используйте функцию двойной стрелки, если вам нужно передать фиксированный параметр

 const update = (cond) => () => {
   console.log(cond);
}

<span onClick={this.update(true)} className="fa fa-thumbs-up fa-2x" style={{ backgroundColor: 'green' }} />
 

Или вы можете использовать анонимную функцию

 const update = (cond) => {
   console.log(cond);
}

<span onClick={this.update(true)} className="fa fa-thumbs-up fa-2x" style={{ backgroundColor: 'green' }} />
 

но, как говорится в документации:

Проблема с этим синтаксисом заключается в том, что каждый раз при отображении LoggingButton создается другой обратный вызов.

Источник: reactjs.org

Комментарии:

1. Но мне нужно передать аргумент функции

Ответ №2:

сделайте это

 <span onClick={() => this.update(true)} ... />
 

onClick получите функцию, и вы предоставите ей возвращаемое значение update

Ответ №3:

Вы могли бы передать анонимную функцию следующим образом:

 <span onClick={() => this.update(true)} .../> 

Комментарии:

1. Это будет продолжать выделять новые ссылки из-за анонимной функции.

2. @Jax-p Я не понимаю, как это?

3. Комментарий @ Francisco Jax-p не касается достоверности решения. Это тот факт, что вы передаете анонимную функцию в свой обработчик кликов, что приводит к снижению производительности. Лучше сделать это именованной функцией.