I'm a newbie in react (even in JS). I'm made the following code in my App
class:
nameChangeHandler = (event, personId) => {
//method code
};
render()
{
<div>
{this.state.persons.map((person, index) => {
return <Person
// nameChangeHandler={(event) => this.nameChangeHandler(event, person.id)}
nameChangeHandler={this.nameChangeHandler.bind(this, person.id)}
/>
})}
</div>
}
I'm passing nameChangeHandler
to Person
component where I call it in onChange
event in input
tag (<input type="text" onChange={props.nameChangeHandler}/>
)
Application works fine when I pass it in this way:
nameChangeHandler={(event) => this.nameChangeHandler(event, person.id)}
but it doesn't when I do it like this:
nameChangeHandler={this.nameChangeHandler.bind(this, person.id)}
It fails with an exception when I'm trying to acces event.target.value
in nameChangeHandler
method.
How can I pass event and argument to this method using bind()
method instead of arrow function?
I've heard we should always use bind()
approach over the arrow function because an arrow function approach could render component many times.
Is there any special use cases and differences between bind()
and arrows functions?