This was originally posted as a Twitter thread: https://twitter.com/chrisachard/status/1167132279333957632
Want to learn hooks, but you've been too busy? ⏲
🔥 Here's a mini crash course just for you! 🔥
(code links at the end)
1.
Add state to function components by calling useState
and pass in the initial value.
2.
useState
returns 2 values in an array:
- the current value of the state
- a function to update the state
3.
Call hooks at the top level of a function, and NOT in if statements or loops.
This is required for React to internally keep track of the hook values.
4.
Perform asynchronous actions and actions with side effects in the useEffect
hook
That way, async actions still work across multiple renders
5.
useEffect
takes an array of dependencies as the second argument
THIS IS IMPORTANT! Skipping the dependency list can result in infinite loops, or code that doesn't run when you think it should
6.
Write custom hooks as function that start with the word use
Then use any built in hooks you want
and return (or not) and values and functions
7.
There are many other built in hooks, but they all follow similar patterns
Get the complete list here: https://reactjs.org/docs/hooks-reference.html
8.
That's it! You can now add state and long-running effects to function components.
Class components aren't dead, but hooks do help clean up some component logic.
9.
Here are links to code you can try out!
useState
useEffect
Custom Hooks
Like this post?
You can find more by:
- Following me on twitter: @chrisachard
- Joining the newsletter: chrisachard.com
Thanks for reading!
Top comments (10)
This is what I needed this whole time! Easy, clean and descriptive! Thank you mate! 😍
You're welcome!
Do react hooks make it easier to use the mvvm design pattern?
Not necessarily easier - hooks are mostly a way to provide functionality to function components (instead of class components), and then they let you re-order and organize how to handle things like effects. So it's not like they allow you to do anything new necessarily - but they just let you organize and respond to your data and effects in a new way.
This article may be helpful: medium.com/@thomasburlesonIA/https...
Ignoring the bits about RXJS specifically, the "facade" approach of putting all your "view-model" logic into a custom hook and then pulling the VM hook into the components you need, is pretty great. Previously this would be done with the container/pure-component model and/or higher-order-components (HoCs), which have their own pitfalls and boilerplate to deal with.
So while hooks don't give you any groundbreaking new MVVM architecture out of the box, I do think they make it easier and cleaner to implement.
Thanks for the link! I'll check it out
I've been trying to understand Hooks for a while and this post basically explained me how to use them. Thank you very much, it is a very well written article!
Thanks! I really like the format as well: Hopefully I'll do more! I like the "mini crash course" idea, plus it fits well for both twitter and for here.
Glad it was helpful!
Thanks for this - it's the perfect overview I needed!
Glad it helped!