How Do I Access Both The Class And The Calling Object In An Es2015 Class Method?
Solution 1:
Bind it to your instance, and use event.target
or event.currentTarget
to access the TextField; this is shown in the docs here.
Actually, I think there's a standard React way to hook it up so you don't have to do the bind explicitly (which would be better; binding is cumbersome): When rendering, use onChange={this.onBookNameChange}
.
Here's the example from the docs:
getInitialState: function() {
return {value: 'Hello!'};
},
handleChange: function(event) {
this.setState({value: event.target.value});
},
render: function() {
var value = this.state.value;
return<inputtype="text"value={value}onChange={this.handleChange} />;
}
Note handleChange
's use of this
and event.target
.
target
and currentTarget
doesn't matter if the handler is bound to an element (like input type="text"
) that can't contain other elements, but can matter for ones that can: currentTarget
is the element that you bound the handler to (what you'd see as this
if you were using this
for something else). target
is the element where the event occurred, which can be a descendant element. Think a div
with a span
in it: if you've hooked click
on the div
, and someone clicks the span
, target
will be the span
and currentTarget
will be the div
.
So when replacing this
with something from event
, currentTarget
would be the default thing to reach for to get an equivalent to this
. target
is really useful for delegation.
Solution 2:
You can bind multiple values to the
onEnterKeyDown={this.onBookNameChange}
It could look like this
onEnterKeyDown={this.onBookNameChange.bind(this, book.name}
In your function it would look like this:
onBookNameChange(name, ev) {
console.log(this);
console.log(ev);
console.log("name: " + name);
}
Post a Comment for "How Do I Access Both The Class And The Calling Object In An Es2015 Class Method?"