For someone like me who comes from an OOP background, and hadn't touched any JavaScript since the advent of Node.js, learning React.js can be really hard. If you find yourself struggling to learn to learn React.js, I recommend learning Vue.js first.

Now, why can React.js be hard to learn? To use React.js, you first need to understand JavaScript, Node.js, NPM/Yarn, Webpack, Babel, JSX. That is a whole lot of things to learn at once before you can even write your first line of code. Sure, you can use React.js without any of that (with CDN), but almost every example/tutorial of React.js out there is written in JSX.

What is JSX? JSX is an XML-like template that compiles to JavaScript. Eg.

<h1>Hello World</h1>
compiles to:
React.createElement('h1', null, 'Hello World')

The JSX to JavaScript conversion is performed using a JSX to JavaScript transpiler, the most popular being Babel. Babel also allows you to use the latest JavaScript features even before they are supported by your targeted environment, by transpiling them down to ES5 code. This is usually automated using Webpack, a build tool for JavaScript. NPM/Yarn is a dependency manager for JavaScript, which is required to download loaders/plugins for Webpack. Node.js is a JavaScript engine that allows you to execute JavaScript code outside of a web browser.

So, how is Vue.js easier to learn? Vue.js comes with its own template, that can be used without any other external dependency. That means you can learn Vue.js without having to learn Node.js, NPM/Yarn, Webpack, Babel, JSX, etc. beforehand. After getting familiar with Vue's template syntax and its concepts, you can then slowly incorporate the aforementioned tools into your project to improve performance, development time, maintainability, etc. (I may elaborate more on this in a separate blog post).

Once you've mastered all of the concepts and required tools, it should be extremely easy to learn React.js, if you still wish to do so.

Edit: Apparently there are starter kits for React.js (eg. create-react-app) that comes pre-configured with all the aforementioned tools and more (eg. Flow, ESLint). These really should be included in React's User Guide.