React, as with any other technology has it's benefits and drawbacks. That being said React is in my opinion, different. Most technologies have one main way to complete any given task. For example, with Express.js. To create a get route you use app.get
. That is the standard way to do it. Every tutorial, code snipet, and example I have seen using Express uses that same syntax. The same cannot be said about React. To create a component you can use React.createClass
or extends React.Component
, you can use ES6 syntax or opt to use older syntax, you can use JSX or not. The amount of different ways to complete very simple tasks in React is crazy. I use the internet to search for code snippets and examples for syntax (remembering all types of syntax is very difficult, and I know I'm not alone in this). So when searching for React examples or syntax examples you can get options that don't fit into your current way of doing things. Maybe you are using ES6 and you find a code snippet or example that doesn't, or another one that doesn't use JSX but you are in your project.
For experienced React developers I'm assuming this isn't an issue. But for beginners to React this creates a lot of confusion and often leads to having to spend an unreasonable amount of time learning different syntax and how to convert syntax that is not relevant to your project what so ever.
I also believe that not all of this is React's fault. I believe React can do a better job at standardizing the syntax and can play a more involved role to solve this problem. Some of this problem rests with new syntax such as ES6 that is so different and JSX (which I've only seen used in React).
That all being said React is a very cool library for front-end development. The idea of structuring applications into components and having those React to changes is very cool and interesting. It's a hard trade off between some pretty cool features and functionality in React and dealing with the number of syntax options, and facing challenges in terms of setting up a new project (with Webpack, Babel, etc).