у меня есть
var TestApp = React.createClass({
getComponent: function(){
console.log(this.props);
},
render: function(){
return(
<div>
<ul>
<li onClick={this.getComponent}>Component 1</li>
</ul>
</div>
);
}
});
React.renderComponent(<TestApp />, document.body);
Я хочу раскрасить фон элемента списка, по которому щелкнули мышью. Как я могу это сделать в React?
Что-то вроде
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
javascript
jquery
reactjs
user544079
источник
источник
event.currentTarget.style.backgroundColor = '#ccc';
если вы действительно не понимаете, что делаете (в большинстве случаев при интеграции сторонних виджетов).Я могу думать о двух способах:
Это мой личный фаворит.
Вот ДЕМО
Надеюсь, это поможет.
источник
.bind
не принимает дополнительный параметр. Но в первом случае это так. Я не думаю , что есть еще один способВот как вы определяете обработчик события onClick , который отвечал на заголовок вопроса ... с использованием синтаксиса es6
источник
bind
функции, ни стрелочные функции не должны использоваться вrender
методах, потому что они приводят к созданию новой функции каждый раз. Это приводит к изменению состояния компонента, и компоненты с измененным состоянием всегда повторно визуализируются. Для синглаa
это не проблема. Для сгенерированных списков с интерактивными элементами это очень быстро становится проблемой. Вот почему это специально предостерегается.Используйте ECMA2015. Стрелочные функции делают "это" намного более интуитивным.
источник
index
здесь ничего не делает?Если вы используете ES6, вот простой пример кода:
В телах классов ES6 функциям больше не требуется ключевое слово function, и их не нужно разделять запятыми. Вы также можете использовать синтаксис =>, если хотите.
Вот пример с динамически создаваемыми элементами:
Обратите внимание, что каждый динамически создаваемый элемент должен иметь уникальный ссылочный «ключ».
Кроме того, если вы хотите передать фактический объект данных (а не событие) в вашу функцию onClick, вам нужно будет передать это в вашу привязку. Например:
Новая функция onClick:
Передача объекта данных:
источник
bind
функции стрелок в JSX.Итак, как упоминалось в документации React , они очень похожи на обычный HTML, когда дело доходит до обработки событий, но имена событий в React с использованием camelcase, потому что они на самом деле не HTML, это JavaScript, также вы передаете функцию, пока мы передаем вызов функции в строковом формате для HTML они разные, но концепции очень похожи ...
Посмотрите на пример ниже, обратите внимание на то, как событие передается в функцию:
источник
источник
@ user544079 Надеюсь, эта демонстрация поможет :) Я рекомендую изменить цвет фона, переключив имя класса.
источник
источник
Вы можете использовать метод React.createClone. Создайте свой элемент, затем создайте его клон. Во время создания клона вы можете вводить реквизит. Вставьте опору метода onClick: как это
{ onClick : () => this.changeColor(originalElement, index) }
метод changeColor установит состояние с дубликатом, что позволит вам установить цвет в процессе.
источник
Это нестандартный (но не такой уж и редкий) шаблон React, который не использует JSX, вместо этого помещает все в строку. Кроме того, это Coffeescript.
Реагировать на это можно с помощью собственного состояния компонента:
(
c = console.log.bind console
)Этот пример работает - я тестировал его локально. Вы можете посмотреть этот пример кода в моем гитхабе . Первоначально env был локальным только для моих собственных научно-исследовательских целей, но для этого я разместил его на Github. В какой-то момент он может быть переписан, но вы можете проверить фиксацию от 8 сентября 2016 года, чтобы убедиться в этом.
В более общем плане, если вы хотите увидеть, как работает этот шаблон CS / no-JSX для React, ознакомьтесь с некоторыми недавними работами здесь . Возможно, у меня будет время полностью реализовать POC для этой идеи приложения, стек для которого включает NodeJS, Primus, Redis и React.
источник
do
лямбда: Это выражение также работает:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'