Przekazuję 2 wartości do elementu potomnego:
- Lista obiektów do wyświetlenia
- funkcja usuwania.
Używam funkcji .map () do wyświetlania mojej listy obiektów (jak w przykładzie podanym na stronie z instrukcją reagowania), ale przycisk w tym komponencie uruchamia onClick
funkcję podczas renderowania (nie powinien odpalać w czasie renderowania). Mój kod wygląda następująco:
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>
);
}
});
Moje pytanie brzmi: dlaczego onClick
funkcja odpala podczas renderowania i jak go nie robić?
javascript
reactjs
button
onclick
dom-events
Stralos
źródło
źródło
onClick={() => this.props.removeTaskFn(todo)}
Zamiast wywoływać funkcję, powiąż wartość z funkcją:
MDN ref: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
źródło
Wartość tego
onClick
atrybutu powinna być funkcją, a nie wywołaniem funkcji.źródło
Dla tych, którzy nie używają funkcji strzałek, ale coś prostszego ... Zetknąłem się z tym podczas dodawania nawiasów po funkcji signOut ...
wymień to
<a onClick={props.signOut()}>Log Out</a>
z tym
<a onClick={props.signOut}>Log Out</a>
...! 😆źródło
JSX jest używany z ReactJS, ponieważ jest bardzo podobny do HTML i daje programistom poczucie używania HTML, podczas gdy ostatecznie transponuje się do pliku javascript.
Posługiwać się -
co znaczy-
źródło
JSX oceni wyrażenia JavaScript w nawiasach klamrowych
W takim przypadku
this.props.removeTaskFunction(todo)
wywoływana jest wartość przypisana do zwracanej wartościonClick
Musisz podać
onClick
funkcję. Aby to zrobić, możesz zawinąć wartość w anonimową funkcję.źródło
Miałem podobny problem, mój kod to:
Gdzie powinno być
w RenderRadioInput
Naprawiono problem dla mnie.
źródło