Я передаю 2 значения дочернему компоненту:
- Список объектов для отображения
- удалить функцию.
Я использую функцию .map () для отображения моего списка объектов (как в примере, приведенном на странице руководства по реагированию), но кнопка в этом компоненте вызывает onClick
функцию при рендеринге (она не должна срабатывать во время рендеринга). Мой код выглядит так:
module.exports = React.createClass({
render: function(){
var taskNodes = this.props.todoTasks.map(function(todo){
return (
<div>
{todo.task}
<button type="submit" onClick={this.props.removeTaskFunction(todo)}>Submit</button>
</div>
);
}, this);
return (
<div className="todo-task-list">
{taskNodes}
</div>
);
}
});
Мой вопрос: почему onClick
функция рендеринга срабатывает и как сделать так, чтобы она не выполнялась?
javascript
reactjs
button
onclick
dom-events
Stralos
источник
источник
onClick={() => this.props.removeTaskFn(todo)}
Вместо вызова функции свяжите значение с функцией:
Ссылка на MDN: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
источник
Значением вашего
onClick
атрибута должна быть функция, а не вызов функции.источник
Для тех, кто не использует функции стрелок, но что-то попроще ... Я сталкивался с этим при добавлении скобок после моей функции signOut ...
замени это
<a onClick={props.signOut()}>Log Out</a>
с этим
<a onClick={props.signOut}>Log Out</a>
...! 😆источник
JSX используется с ReactJS, так как он очень похож на HTML и дает программистам ощущение использования HTML, тогда как в конечном итоге он переносится в файл javascript.
Используйте -
что значит-
источник
JSX будет оценивать выражения JavaScript в фигурных скобках
В этом случае
this.props.removeTaskFunction(todo)
вызывается и возвращаемое значение присваиваетсяonClick
То, что вы должны обеспечить,
onClick
является функцией. Для этого вы можете обернуть значение в анонимную функцию.источник
У меня была похожая проблема, мой код был:
Где это должно быть
в RenderRadioInput
Это исправило проблему для меня.
источник