A Year of React - 2019 in Review
What was the big takeaways from React in 2019? This post summarizes the biggest news stories, updates and releases.
There was a lot that happened in 2019. We've spent every Monday night giving you a short summary of all the big and small news stories in this community we all love and cherish. Some of those stories were a bit bigger than the others.
In this post, we'll go through the year, highlighting some of the biggest new features and news stories of 2019. To finish it off, we've also found the recordings from some of our favorite React conferences!
After a few months of eager waiting, React 16.8 finally brought the feature we'd been waiting for - Hooks - to a stable release.
It was at ReactConf 2018 the React Core team let us know they were working on new functionality that was supposed to improve our React quality of life considerably. The proposal was named hooks, and gave us great tools to handle both state and side effects in function components.
If you didn't catch the initial talk, you can (and should!) see it here:
We also wrote a post about what we thought about hooks (in Norwegian), if you want to give that a shot. 🤘
React Native gets hooks, too!
The week after Hooks were launched for the web, React Native followed suit. The 0.59 version included full hooks support, and had all of React Native Twitter freaking out 🙌
React Router 5
This was such a great release - completely without breaking changes! Well - almost. The only reason they had to bump their major version was the way they handled their dependencies in
It might have been in violation with the rules of semantic versioning, but whatever 🤭 Here's the release blog post if you want to read more about it!
But it wasn't all screw-ups - this version brought React 16 compability, no more
<StrictMode /> warnings, support for an array of paths, and lots more.
Create React App v3
The third major version of
create-react-app came with a bunch of new cool stuff, including "rules of hooks" eslint support, TypeScript linting and absolute imports.
You can read the complete changelog here.
Hot Reloading 2.0: Fast Refresh
Hot reloading is simultaneously the best and the worst feature of the React developer experience. It's just amazing to see your components update automatically on save, while keeping the component state. It lets us iterate quicker than on any other platform I know of! At the same time, it has a tendency to not work like half the time, and it can be a nightmare to get working in the first place.
Most of the reason the developer experience has been both good and bad is that it was a feature implemented in user land. To fix this, the React team has stepped up and implemented a much more stable implementation that works in both React and React Native.
It's already available for React Native, and support for the web is just weeks away. If you're using Parcel, you can start using it in the newer alpha releases, and Webpack has an open pull request for adding support.
This means we'll probably get it in
create-react-app as well! We're very excited.
React Router and Reach Router join forces
Routing is something most React apps use in some way, and lately there has been two major players out there. React Router has been the defacto choice for a long time, but ever since Gatsby started using the competitor Reach Router, we suddenly have a choice to make when it comes to routing. At least until next year.
On the Norwegian national day, May 17th, Reach Router king (and React Router founder) Ryan Florence proclaimed that the two libraries are merging into one!
Speaking of mergers - perhaps we'll see more of those moving forward? In the CSS-in-JS world, Styled Components and Emotion is starting to look veeery similar API-wise! 🤔
After teasing us throughout the year, Brian Vaughn was very proud when he finally revealed the completely rewritten version of React DevTools this August. This rewrite brought hooks support, improved performance for large applications and a much better user experience.
While most of the big names in React were hanging out at React Rally, a pretty nasty Twitter incident happened. What was later known as "React Gate" was a large, distributed argument about the more toxic and racist parts of our community. Racism and social exclusion were discussed in a very vocal and polarizing way, and a lot of people excused themselves from Twitter for an extended period of time. Ugh.
The aftermath wasn't all bad though. On the contrary - some very actionable positive things came from it! The React team has increased their focus on including marginalized groups in tech, and implemented the Contributor Covenant Code of Conduct. Many of the people included in the React Gate episode has later taken on stronger roles in the community, trying to include good folks and shut down the trolls, racists and misogynists. That's what I call a happy ending.
The big event of this fall was ReactConf in Henderson, Nevada, and it was a really nice one. The biggest news was the introduction of Concurrent Mode - which is now available in the experimental release channel of React.
Please note, however, that it's still very much experimental, and not available in any stable release. If you're trying to dig into the APIs to be a bit in front when they are published, however, you should dig right in.
To quote the extensive documentation, Concurrent Mode is
a set of new features that help React apps stay responsive and gracefully adjust to the user’s device capabilities and network speed.
This sounds wonderful! The React team has provided us with an amazing developer experience as they have iterated on their product, but this feature is a bit different. It's about the end user experience - and making it as smooth as possible. We're really digging that direction!
Concurrent Mode opens up a new world of possibilities. As the name hints, it lets us render several things concurrently, and even pause rendering certain elements if a higher priority task comes along. All of this plays together to make your app seem as smooth as possible.
He even touches on whether you need to deal with Concurrent Mode. The answer is - as with most new and more advanced React features - no, but it's a huge win for your users if you do. It's a powerful tool that gives you the opportunity to control how your apps is handling asynchronous tasks and rendering your UI - if you have the time and resources, of course.
Suspense for data fetching
Since React 16.6, React's new Suspense feature has given you the opportunity to delay rendering of your components while you wait for parts of your application to load, and render a loader instead. With the aforementioned Concurrent Mode, we also get this feature for fetching data, images and basically whatever you want!
You can read all about in the docs (note - this is still experimental!)
As with anything that's new and shiny, it might be a bit hard to understand how it all fits together. Luckily for us, Maggie Appleton has made an amazing illustrated guide to both Suspense, how it works, and how to use it:
Another way to understand what problem this new feature solves for us, we also suggest that you have a closer look at this Twitter thread from Dan Abramov. He identifies what the problems with today's solutions are, and pin points how Suspense comes in to save the day.
Create React App gets templates
In December the 3.3.0 version of the offical React bootstrapping CLI
create-react-app dropped, and it contained a few very cool features.
First of all, it now supports the concept of custom templates. That is, the files and dependencies that are included when you bootstrap a new project!
This is a great feature for products like CodeSandbox, since it gives them the opportunity to create much more flexible templates for their users. CodeSandbox even launched what they call their Template Universe, which promises to improve project startup times.
react-testing-library is included by default. This wonderful library is a must-have for any project anyways, so I'm glad they decided to include it for all projects.
For a complete list of new features, we'd refer you to the changelog here.
Redux Style Guide
If you reading this, there's a high probability that you've touched Redux at one point or another. If you haven't - Redux used to be the must-have application state handling library for any new React app.
Redux has lost much of its glory in the last year, mostly due to improvements in React itself. Many people used Redux as their global store, but with the new Context API and introduction of hooks, solving that problem yourself became almost trivial. In addition, Redux introduced a lot of boiler plate in places where it didn't seem necessary.
That being said, Redux is still a great tool for complex applications, and - much more important - is probably a part of the tech stack of the legacy app you're stuck maintaining.
Since Redux probably isn't going anywhere in the foreseeable future - not from the React ecosystem, and not from your app - it's important to use it the best way possible. That's why Mark Erikson and his crew of maintainers has written a very detailed and useful list of recommendations on how you should do things "the Redux way". It includes a set of rules they've split into three sections - essentials, highly recommended, and optional.
Follow these, and you'll end up with smaller, simpler code with less bugs, and a simpler way to onboard new developers.
Some of our favorite conferences
In addition to all the new features, libraries and news stories we've stumbled across the last couple of months, we've noticed there has been a ton of React related conferences! We've summarized both React Conf and JSConf (both in Norwegian), but here's a quick overview over all the biggest conferences related to React, and where you can find all the talks. There's no particular order here 🤷♂️
Speaking of conferences - you can find a very complete list of both conferences and meetups related to React on React's website!
ReactJS Girls Conf
There was a lot of butts hurt when am all-female speaker React conference was announced. What a silly thing to be pissed off about. The conference was amazing, with incredible talks, exciting speakers and supposedly a really nice experience for those that attended.
The official React conference had a lot of cool talks, about anything from Suspense to Facebook's internal CSS-in-JS library. I'd especially suggest Sophie Alpert's talk, where she implements a working version of React while live coding it on stage 🤯
As the name implies, this is one of the biggest React conferences in Europe. Among many great talks held, Jared Palmer (the guy behind Formik, TSDX and one half of the Undefined Podcast) did a great talk about the state of React.
React Amsterdam has one of the coolest visual identities we've seen, and the content followed suit. Tons of famous React people showed up, including Kent C. Dodds, Max Stoiber and the meme king Mark Dalgleish.
While the US React crowd was partying hard at ReactConf in Nevada, the European scene centered around React Advanced. The
r/reactjs boss Shawn Wang (aka swyx) live coded a hook implementation from stage, and the always entertaining Ken Wheeler (holla) kicked off the keynote with a bit of magic!
Being known as the best React conference to attend must be a good thing for ticket sales. The React Rally was sold out as usual, and it sounds like it was a great time this year, as well as last year. There was some really great talks there this year, but my favorite must've been the 11 year old Revel West's talk "So you think you're a junior dev?" 👶
2019 has been an amazing year for React and its community. The continued focus on improving developer experience is now being matched by an incredible effort to improve the end user experience as well. No matter how you put it - it's all good news.
The introduction of hooks has really been the change we hoped to see, and it has already simplified a lot of code bases around the world. In addition, hooks has made React so much easier to teach - no more explaining
this and misspelled lifecycle methods.
Suspense and Concurrent Mode is probably the next couple of big shifts we'll notice in the year to come, when they're finally available in a public release. We've already seen how the APIs will look like, and the work to introduce the larger React ecosystem to its possibilities is going at full steam.
2019 has been a wonderful year for React. We hope and think that we're going to continue that trend in 2020.
Thanks for reading!