Published Oct 28 2018
React provides an easy way to manage events. Prepare to say goodbye to addEventListener
.
In the previous article about the State you saw this example:
const CurrencySwitcher = props => {
return (
<button onClick={props.handleChangeCurrency}>
Current currency is {props.currency}. Change it!
</button>
)
}
If you’ve been using JavaScript for a while, this is just like plain old JavaScript event handlers, except that this time you’re defining everything in JavaScript, not in your HTML, and you’re passing a function, not a string.
The actual event names are a little bit different because in React you use camelCase for everything, so onclick
becomes onClick
, onsubmit
becomes onSubmit
.
For reference, this is old school HTML with JavaScript events mixed in:
<button onclick="handleChangeCurrency()">...</button>
It’s a convention to have event handlers defined as methods on the Component class:
class Converter extends React.Component {
handleChangeCurrency = event => {
this.setState({ currency: this.state.currency === '€' ? '$' : '€' })
}
}
All handlers receive an event object that adheres, cross-browser, to the W3C UI Events spec.
this
in methodsDon’t forget to bind methods. The methods of ES6 classes by default are not bound. What this means is that this
is not defined unless you define methods as arrow functions:
class Converter extends React.Component {
handleClick = e => {
/* ... */
}
//...
}
when using the property initializer syntax with Babel (enabled by default in create-react-app
), otherwise you need to bind it manually in the constructor:
class Converter extends React.Component {
constructor(props) {
super(props)
this.handleClick = this.handleClick.bind(this)
}
handleClick(e) {}
}
There are lots of events supported, here’s a summary list.
I wrote an entire book on this topic 👇
© 2023 Flavio Copes
using
Notion to Site
Interested in solopreneurship?