Screenshot of a browser with ReactJS' GitHub page open. The browser window is outlined with a simple, dark, starry background.
Photo by Luke Chesser on Unsplash

A note on qual­ity

This is a draft” post. If you’re look­ing for an ex­pla­na­tion of what a draft post is do­ing on a pub­lished site, you can find one here.

In short, this post most likely does not meet my high stan­dards — at times, even base­line. It may not be com­plete, have spelling er­rors, etc. I have pub­lished it be­cause I think in some way, as in­signif­i­cant as it could be, you might find it re­source­ful.

Disclaimers

  • I usu­ally keep away from per­sonal posts on my ar­ti­cles feed, but this is one and I may choose to do more of these de­pend­ing on how I feel at the time. This, re­all, is an opin­ion piece.
  • It’s also a draft post, as must be ev­i­dent. I’m not go­ing to link to tools like TypeScript and such. Please use a search en­gine. Where ab­solutely nec­es­sary, I have linked to re­sources.
  • The words ReactJS’ and React’ have been used in­ter­change­ably.

It’s no se­cret I’ve been ac­tively look­ing for a job of late. I’ve pretty much stopped my work on Celestial un­til I can find a full-time role, too. No em­bar­rass­ment in pri­or­i­tiz­ing to pay your own bills, and small FOSS pro­jects like mine just don’t do that by them­selves. Unfortunate, but true.

The mar­ket and job ti­tles

The mar­ket is un­usual right now be­cause of Covid-19. Still, it ap­pears to me the tech in­dus­try in gen­eral is largely hir­ing — and some tell me it never stopped bar mid-sized and large cor­po­rates.

Perhaps hir­ing man­agers are more cau­tious than usual, and maybe the salaries are lower — but those are dif­fer­ent is­sues to the fact that hir­ing is still on.

What I find in­ter­est­ing is that job ti­tles are now React de­vel­oper, nei­ther JavaScript de­vel­oper nor Frontend de­vel­oper. Even those that call it ei­ther of the lat­ter two tend, more of­ten that not, to be look­ing for a React de­vel­oper.

How I (and many in the com­mu­nity) feel about ReactJS

Anything that achieves the main­stream sta­tus ReactJS has — and so quickly — surely sig­nals that it solved a real prob­lem and did so grace­fully. However, with this main­stream sta­tus, we also have de­vel­op­ers, old and new alike, writ­ing every sin­gle thing in React (or Vue or Angular or any other UI frame­work/​li­brary).

You might have been think­ing, I al­ready know and work in ReactJS, so this has the least bar­rier to en­try for me. Anyway, I care more about the con­tent than I do about de­ci­sions like these.” Perfectly valid. No prob­lems at all. You’re al­lowed to do what you feel is best for you, and I sup­port you!

That said, the ReactJS ecosys­tem comes with its own… pe­cu­liar­i­ties. The bar­rier to en­try for any­one other than ReactJS de­vel­op­ers is mas­sive. Maintaining such pro­jects is hard as the ecosys­tem is ever-chang­ing. And quite fast at that. Just a few months down the line and your knowl­edge is likely to be ob­so­lete. Cloudflare wrote about how JavaScript li­braries are al­most never up­dated once in­stalled.

Smarter peo­ple than me have writ­ten more about it and you’ll find these to be much more lu­cid and well-put-to­gether:

Dave Rupert’s post es­pe­cially struck with me:

React is so much more than just JavaScript”. React is an ecosys­tem. I feel like it’s a dis­ser­vice to any­one try­ing to learn to di­min­ish all that React en­tails. React shows up on the scene with Babel, Webpack, and JSX (which each have their own learn­ing curve) then quickly branches out into tech­nolo­gies like Redux, React-Router, Immutable.js, Axios, Jest, Next.js, Create-React-App, GraphQL, and what­ever weird plu­gin you need for your app.

The ecosys­tem is con­stantly evolv­ing and build­ing off it­self, com­post­ing old best prac­tices into new best prac­tices. It’s thriv­ing. It’s a biome filled with life­cy­cles, hype cy­cles, and ma­jor API changes.

In my ex­pe­ri­ence, there’s no ca­sual mode within React. You need to be all-in, keep­ing up with the ecosys­tem, or else your knowl­edge evap­o­rates. I some­times browse React pro­jects and look at the import blocks to see if I rec­og­nize any of the de­pen­den­cies; I prob­a­bly av­er­age about ~8%.

Why am I learn­ing it from scratch?

Outdated knowl­edge

Almost all of my on-the-job ReactJS ex­pe­ri­ence is from the time when it adopted ES6 classes. You had a con­struc­tor, life­cy­cle meth­ods, and a spe­cial ren­der method. That was all of React, if you wanted it to be.

The pro­ject did­n’t use Redux. Despite the code­base be­ing large, it was just fine with ReactJS’ in­ter­nal state man­age­ment. There was no i18n li­brary, no sta­tic typ­ing be­yond PropTypes. Despite all this, the pro­ject was sta­ble. We had im­ple­mented a sim­ple JavaScript so­lu­tion for i18n.

…which proves to me it is pos­si­ble to use ReactJS and be sane at the same time. That’s be­side the point, though.

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

Apparently, the super method has been dep­re­cated as have a bunch of other life­cy­cle meth­ods, and the class way of writ­ing com­po­nents is on its way out? Frankly, I don’t even know what I don’t know!

Well… React de­vel­op­ers.

The cur­rent mar­ket is near-ex­clu­sively look­ing for React de­vel­op­ers. That comes with the bag­gage of know­ing and be­ing fa­mil­iar with an en­tire ecosys­tem:

  • state man­age­ment via Redux or Flux,
  • mid­dle­ware for state man­age­ment, such as Redux-Thunk or Redux-Sagas,
    • …cue ES6 gen­er­a­tors.
  • sta­tic typ­ing via TypeScript or Flow,
  • CSS-in-JS so­lu­tions such as styled-com­po­nents,
  • im­mutable data struc­tures via Immutable.js (and more?),
  • server-side-ren­der­ing,
  • de­bug­ging with ReactJS and Redux Developer Tools,
  • new way of pars­ing/​fetch­ing data from an API (GraphQL),
  • pop­u­lar frame­works on top of React such as cre­ate-re­act-app, Next.js, and Gatsby,
  • ma­jor API changes within ReactJS it­self,
  • er­ror bound­aries,
  • con­text API,
  • and so on.

As Dave Rupert said, the only way to be a React de­vel­oper is to go all-in.

With my job-hunt tak­ing the lime­light cou­pled with the de­mand for React de­vel­op­ers, it fol­lows that my free” time must be ded­i­cated to im­mers­ing my­self in the React ecosys­tem and achiev­ing some level of mas­tery in it.

On mode of learn­ing

I paid a small amount for a course by Maximilian Schwarzmüller ti­tled React - The Complete Guide (incl Hooks, React Router, Redux).”

I usu­ally pre­fer writ­ten doc­u­men­ta­tion and tu­to­ri­als over video learn­ing, but I feel watch­ing and lis­ten­ing may be bet­ter suited for the breadth of knowl­edge I’ll need to cover in a short amount of time.

To echo Dave Rupert’s sen­ti­ments, in prac­tice, ReactJS is no longer just a view layer, it’s a whole ecosys­tem. Reading React’s of­fi­cial docs and call­ing it a day is not a re­al­is­tic op­tion.

Closing words

All crit­i­cism aside, I firmly be­lieve in the phi­los­o­phy of pick­ing 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 com­mu­nity, put more thought into what we use in our pro­jects, we may end up mak­ing the web a slightly bet­ter place for every­one, not just those of us with priv­i­lege — of time, per­for­mant hard­ware, and the abil­ity to con­stantly keep up.

And, I hope this ex­er­cise in re-learn­ing and learn­ing will make me a bet­ter fit for some jobs and that I’ll be able to land one, too!