If you follow the hype, you probably get the impression that React has supplanted Angular as the hot-new-silver-bullet-solution to all of your front-end-development problems. JSX, props, state, Flux with Stores, Dispatchers, Actions, componentDid/WillMount and other lifecycle events, Jest - just a week ago all of these seemed unnecessary (as I'm sure directives, transclusion and scope did at one time). The negative reaction I had to these words was visceral. Another set of concepts to learn - wasn't Angular good enough?!
I doubt I'm the only one that has felt this sort of reaction when a new tool challenges one you've invested so much time in and enjoy using on a daily basis.
My hesitation to give React serious consideration seems to have been borne out of a combination of stubbornness, cynicism, unwillingness to move away from the comparatively more established and understood eco-system built around Angular, and well, because I actually haven't felt like I have had any issues with Angular since I got over the initial learning curve. I was able to easily avoid performance issues through pagination of lists and one-way binding. In the event that something doesn't work quite as expected, I find a quick work-around and continue on. I've built up a library of snippets that speed up my workflow. I don't find the directive API to be confusing as many do.
So when did I become the kind of developer that avoids a tool for irrational, emotional reasons? When did I stop trying to use the best tools for the job and instead just use what I know?
As developers we all acknowledge that keeping up-to-date with new software tools and techniques is part of the job, but as humans we let our emotions and hard-wired resistance to change get in the way. Looking back on learning Angular, I remember feeling the same way as I felt about React, at first - I wanted to just stick with Backbone.
[Stockholm syndrome] is a psychological phenomenon in which hostages express empathy and sympathy and have positive feelings toward their captors, sometimes to the point of defending and identifying with the captors. These feelings are generally considered irrational ... [and the hostages] mistake a lack of abuse from their captors for an act of kindness.
I'm not suggesting that this is exactly what is happening - clearly no technology literally holds us hostage (yet) but I do believe that a similar phenomenon to Stockholm syndrome applies to learning new tools. We defend and identify with the knowledge we have and the tools that we use, and mistake the lack of issues that we run into while applying them, due to the accumulated experience in working with & around them, as proof of their worth. But try considering these questions:
- How easy is it for someone new to pick it up and get going?
- Have you been unconsciously avoiding certain types of solutions because you're limited by the techniques that you have available to you?
- Are there new problems that you haven't yet faced that will be better handled by this tool?
- Is there not a better way?
- If there is, don't you want to know what it is?
I'm not suggesting that you throw away everything you know each time something new comes out - at the rate that the software world changes, you would never get anything done. But there is so much to be learned by just keeping an open mind and giving everything an honest look.
Tool developers certainly don't make this easy for you - most seem perfectly happy to market their solution as superior to others in every way. For the sake of example, not to pick on anyone in particular - why doesn't angularjs.org have a pros/cons table, comparing it with React, Ember, Backbone and whatever else, as well as a list of good use cases, and refer you to another framework when your problem does not apply? Surely there would be no-one better to write this than the framework authors themselves.
So if you do front-end development and haven't tried out React yet, go ahead and check out the awesome-react and get familiar with it (egghead.io React videos are great too). If you don't, then take some time to look into whatever new technology you've either been wanting to learn or have been avoiding for a reason similar to what I felt with React.