I’m learning ReactJS again, from scratch.

This is a draft post. Find out more about what that means. Get in touch if this post could use an improvement.

Disclaimers

  • I usually keep away from personal posts on my articles feed, but this is one and I may choose to do more of these depending on how I feel at the time. This, reall, is an opinion piece.
  • It’s also a draft post, as must be evident. I’m not going to link to tools like TypeScript and such. Please use a search engine. Where absolutely necessary, I have linked to resources.
  • The words ‘ReactJS’ and ‘React’ have been used interchangeably.

It’s no secret I’ve been actively looking for a job of late. I’ve pretty much stopped my work on Celestial until I can find a full-time role, too. No embarrassment in prioritizing to pay your own bills, and small FOSS projects like mine just don’t do that by themselves. Unfortunate, but true.

The market and job titles

The market is unusual right now because of Covid-19. Still, it appears to me the tech industry in general is largely hiring — and some tell me it never stopped bar mid-sized and large corporates.

Perhaps hiring managers are more cautious than usual, and maybe the salaries are lower — but those are different issues to the fact that hiring is still on.

What I find interesting is that job titles are now React developer, neither JavaScript developer nor Frontend developer. Even those that call it either of the latter two tend, more often that not, to be looking for a React developer.

How I (and many in the community) feel about ReactJS

Anything that achieves the mainstream status ReactJS has — and so quickly — surely signals that it solved a real problem and did so gracefully. However, with this mainstream status, we also have developers, old and new alike, writing every single thing in React (or Vue or Angular or any other UI framework/library).

You might have been thinking, “I already know and work in ReactJS, so this has the least barrier to entry for me. Anyway, I care more about the content than I do about decisions like these.” Perfectly valid. No problems at all. You’re allowed to do what you feel is best for you, and I support you!

That said, the ReactJS ecosystem comes with its own… peculiarities. The barrier to entry for anyone other than ReactJS developers is massive. Maintaining such projects is hard as the ecosystem is ever-changing. And quite fast at that. Just a few months down the line and your knowledge is likely to be obsolete. Cloudflare wrote about how JavaScript libraries are almost never updated once installed.

Smarter people than me have written more about it and you’ll find these to be much more lucid and well-put-together:

Dave Rupert’s post especially struck with me:

React is so much more than “just JavaScript”. React is an ecosystem. I feel like it’s a disservice to anyone trying to learn to diminish all that React entails. React shows up on the scene with Babel, Webpack, and JSX (which each have their own learning curve) then quickly branches out into technologies like Redux, React-Router, Immutable.js, Axios, Jest, Next.js, Create-React-App, GraphQL, and whatever weird plugin you need for your app.

The ecosystem is constantly evolving and building off itself, composting old best practices into new best practices. It’s thriving. It’s a biome filled with lifecycles, hype cycles, and major API changes.

In my experience, there’s no casual mode within React. You need to be all-in, keeping up with the ecosystem, or else your knowledge evaporates. I sometimes browse React projects and look at the import blocks to see if I recognize any of the dependencies; I probably average about ~8%.

Why am I learning it from scratch?

Outdated knowledge

Almost all of my on-the-job ReactJS experience is from the time when it adopted ES6 classes. You had a constructor, lifecycle methods, and a special render method. That was all of React, if you wanted it to be.

The project didn’t use Redux. Despite the codebase being large, it was just fine with ReactJS’ internal state management. There was no i18n library, no static typing beyond PropTypes. Despite all this, the project was stable. We had implemented a simple JavaScript solution for i18n.

…which proves to me it is possible to use ReactJS and be sane at the same time. That’s beside the point, though.

Trying to get back into ReactJS now, I feel like a dinosaur. I must re-learn, and learn new things for the first time.

Apparently, the super method has been deprecated as have a bunch of other lifecycle methods, and the class way of writing components is on its way out? Frankly, I don’t even know what I don’t know!

Well… React developers.

The current market is near-exclusively looking for React developers. That comes with the baggage of knowing and being familiar with an entire ecosystem:

  • state management via Redux or Flux,
  • middleware for state management, such as Redux-Thunk or Redux-Sagas,
    • …cue ES6 generators.
  • static typing via TypeScript or Flow,
  • CSS-in-JS solutions such as styled-components,
  • immutable data structures via Immutable.js (and more?),
  • server-side-rendering,
  • debugging with ReactJS and Redux Developer Tools,
  • new way of parsing/fetching data from an API (GraphQL),
  • popular frameworks on top of React such as create-react-app, Next.js, and Gatsby,
  • major API changes within ReactJS itself,
  • error boundaries,
  • context API,
  • and so on.

As Dave Rupert said, the only way to be a React developer is to go all-in.

With my job-hunt taking the limelight coupled with the demand for React developers, it follows that my “free” time must be dedicated to immersing myself in the React ecosystem and achieving some level of mastery in it.

On mode of learning

I paid a small amount for a course by Maximilian Schwarzmüller titled “React – The Complete Guide (incl Hooks, React Router, Redux).”

I usually prefer written documentation and tutorials over video learning, but I feel watching and listening may be better suited for the breadth of knowledge I’ll need to cover in a short amount of time.

To echo Dave Rupert’s sentiments, in practice, ReactJS is no longer just a view layer, it’s a whole ecosystem. Reading React’s official docs and calling it a day is not a realistic option.

Closing words

All criticism aside, I firmly believe in the philosophy of picking the right tool for the right job. React is just that — a tool. It has its uses, but it’s not the catch-all that we treat it as.

If we, as a community, put more thought into what we use in our projects, we may end up making the web a slightly better place for everyone, not just those of us with privilege — of time, performant hardware, and the ability to constantly keep up.

And, I hope this exercise in re-learning and learning will make me a better fit for some jobs and that I’ll be able to land one, too!