A Year of React - 2019 in Review
Tags: react, javascript, webdev, reactnative
Published: 2019-12-31 08:59:13

> Written in collaboration with [Caroline Odden](https://twitter.com/caroline_odden) and [Jonas Løchsen](https://twitter.com/jonaslochsen?lang=en). This post was first published at [blogg.bekk.no](https://blogg.bekk.no/forrigeukes-%C3%A5rskavalkade-2019-c45554088816) (in Norwegian), where we also publish weekly React summaries called `<ForrigeUke />`.

This was a [great year for Greta](https://www.youtube.com/watch?v=xVlRompc1yE), and a [terrible year for Trump](https://www.bbc.com/news/world-us-canada-39945744). But the real winner this year was React, and its amazing community of developers, advocates and regular ol' users. 

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!

---

## Hooks

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:

{% youtube V-QO-KO90iQ %}

Oh, and [here's the introductory blog post, too](https://reactjs.org/docs/hooks-intro.html)!

We also wrote a [post about what we thought about hooks](https://blogg.bekk.no/et-paradigmeskifte-i-react-a9c6c826b4ed) (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 🙌

{% twitter 1096463521896898562 %}

## 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 `react-router-dom`. 

It might have been in violation with the rules of semantic versioning, but whatever 🤭 [Here's the release blog post](https://reacttraining.com/blog/react-router-v5/) 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](https://github.com/facebook/create-react-app/releases/tag/v3.0.0).

## 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.

{% twitter 1169687758849400832 %}

It's [already available for React Native](https://twitter.com/reactnative/status/1176594928865964032), 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!

You can read all the details [here](https://reacttraining.com/blog/reach-react-router-future/), but in short, we'll see more hooks, less libraries (Reach Router is being deprecated), and a common API moving forward. We've already noticed some of this work with the [new hooks introduced in `react-router@5.1.0`](https://reacttraining.com/blog/react-router-v5-1/), and we can't want to see what's in store.

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! 🤔

## New DevTools

After teasing us throughout the year, Brian Vaughn was very proud when he finally revealed [the completely rewritten version of React DevTools](https://reactjs.org/blog/2019/08/15/new-react-devtools.html) this August. This rewrite brought hooks support, improved performance for large applications and a **much** better user experience. 

As far as we can tell from his [Twitter account](https://twitter.com/brian_d_vaughn), however, Brian Vaughn isn't done implementing new features yet. [Version 4.3](https://github.com/facebook/react/blob/master/packages/react-devtools/CHANGELOG.md#430-december-20-2019) is already on its way!

## React Gate

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.

There are [great recaps](https://dev.to/aryanjnyc/ken-wheeler-and-dan-abramov-deactivate-their-twitter-accounts-302) out there that summarizes the entire debacle, and we wrote about it in two of our [blog](https://blogg.bekk.no/forrigeuke-uke-34-2019-2fe53aa8e3b2) [posts](https://blogg.bekk.no/forrigeuke-uke-35-2019-9389f04a29ca).

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](https://github.com/facebook/react/blob/master/CODE_OF_CONDUCT.md). 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.

{% twitter 1166364879852359681 %}

## Concurrent Mode

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](https://reactjs.org/docs/concurrent-mode-intro.html).

To quote [the extensive documentation](https://reactjs.org/docs/concurrent-mode-intro.html), 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.

[Harry Wolff](https://hswolff.com/) has written [an amazing summary](https://hswolff.com/blog/why-is-react-concurrent-mode-exciting/) on why Concurrent Mode is the bees knees, and explains himself with a bunch of great examples.

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](https://reactjs.org/docs/concurrent-mode-suspense.html) (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:

{% twitter 1206644383560478722 %}

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.

{% twitter 1193903570078306308 %}

## 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](https://codesandbox.io/post/hello-template-universe-goodbye-project-setup), which promises to improve project startup times.

{% twitter 1202580698063941632 %}

The other great feature in this new Create React App version is the support for the two new language features in JavaScript - optional chaining and nullish coalescing operators.

In addition, `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](https://github.com/facebook/create-react-app/releases/tag/v3.3.0).

## 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.

{% twitter 1197186583016955904 %}

---

## 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](https://blogg.bekk.no/reactconf-2019-en-oppsummering-d7dfcb45dd2f) and [JSConf](https://blogg.bekk.no/cssconf-eu-jsconf-eu-2019-6261f1f40f0b) (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!](https://reactjs.org/community/conferences.html)

### 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.

You can see all the talks [here](https://www.youtube.com/watch?list=PLfrHCOIcmSupF372EGlyi3l4y2R7F8A3q&v=dkl6sYff2C8).

{% youtube dkl6sYff2C8 %}

### ReactConf

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 🤯

You can see all the talks [here](https://www.youtube.com/watch?list=PLPxbbTqCLbGHPxZpw4xj_Wwg8-fdNxJRh&v=QnZHO7QvjaM).

{% youtube QnZHO7QvjaM %}

### ReactEurope

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.

You can see all the talks [here](https://www.youtube.com/watch?list=PLCC436JpVnK3kcTnPyhcs7QnHK2PKl33D&v=u_0ZMiQZr0k&feature=emb_title).

{% youtube u_0ZMiQZr0k %}

### React Amsterdam

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.

You can see all the talks [here](https://www.youtube.com/watch?list=PLNBNS7NRGKMHLTeH4qfD3F320GXfj97kc&v=tO8qHlr6Wqg).

{% youtube tO8qHlr6Wqg %}

### React Advanced

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!

You can see all the talks [here](https://www.youtube.com/watch?list=PLNBNS7NRGKMH7yfpYQD4TrFV25SMOCIPM&v=t8svxxtUTl8).

{% youtube t8svxxtUTl8 %}

### React Rally

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?" 👶

You can see all the talks [here](https://www.youtube.com/watch?list=PLUD4kD-wL_zaXhR4KU1CkUSIzh1TrvnzA&v=XD8UQeYm5Vk).

{% youtube XD8UQeYm5Vk %}

---

## 2019: Reviewed

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](https://reactjs.org/docs/concurrent-mode-intro.html), and the work to introduce the larger React ecosystem to its possibilities is going at full steam.

React Native has received a ton of love in 2019 as well, which has been necessary to fend off the new competition from new frameworks like Flutter and SwiftUI. We're super excited to see new features landing, like Fast Refresh, quicker JavaScript engine (Hermes) and the vastly improved documentation. 

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!