Пропустить аргумент для обработчика click
У меня вопрос о передаче аргументов для Обработчиков кликов React.
У меня есть следующий код, но по какой-то причине аргумент node не передается функции переключения. Не так ли? Он определен таким образом, потому что он является рекурсивным компонентом.
var Element = React.createClass({
toggle: function(e,node){
},
render: function(){
var nodes = this.props.children.map(function(n){
return <Element node={n} text={n.text} children={n.children} />
});
return (
<span onClick={this.toggle.bind(this,this.props.node)}>{this.props.text}</span>
);
}
});
Ответы
Ответ 1
Function.prototype.bind
связывать аргументы, начинающиеся слева. Правильный способ получения аргумента node - искать его в самой левой позиции списка аргументов:
toggle: function(node, event) {
console.log('node', node);
console.log('event', event);
}
См. http://jsfiddle.net/8xxfgce7/ для примера.
Ответ 2
Хотя приведенный выше ответ верен. Вот еще один пример, как передать как событие, так и параметр на onClick
.
Элемент активации события, например, кнопка:
<button onClick={this.editTask.bind(this, item._id)}>
Edit item
</button>
Функция обработчика событий:
editItem(id, event) {
event.preventDefault() // Prevents default form submission
console.log('id: ', id) // Prints the item id
.
.
.
}