Setting up React

Installation

npm i react-dom
npm i react

Include html file with a root div

Add these script

   <script src="https://unpkg.com/react@15/dist/react.min.js"></script>
   <script src="https://unpkg.com/react-dom@15/dist/react-dom.min.js"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.24.0/babel.js"></script>
   <script type="text/babel">
   ReactDOM.render(
       <div>Hello World</div>,
       document.getElementById("root")
   )
   </script>

react-scripts creates the root html page

Create-react-app

npx create-react-app client

Check process.env.NODE_ENV for the current environment either "production" when built or "development"

To set all imports to be absolute "components/CTA.js" instead of "../components/CTA.js", add the following file to the root(package.json level) dir

jsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "ES6",
    "jsx": "preserve",
    "checkJs": true,
    "baseUrl": "./src"
  },
  "exclude": ["node_modules", "**/node_modules/*"]
}

Setup With Node

mkdir node-react-app && cd node-react-app
npx create-react-app client
npx express-generator backend --no-view
cd backend && npm install

In backend/bin/www, change the default port number to 3001

In client/package.json add "proxy": "http://localhost:3001" to the json

Now in the main folder fullstack_app:

npm init -y 
npm i concurrently

In package.json, add "start": "concurrently \"cd backend && npm run start\" \"cd client && yarn start\"" under scripts

Now just npm run start in the main folder

Docker

Use docker-compose to get two containers up, use "proxy": "http://[service-name]:[port-number]" instead

Gotchas

Express generator comes with express.json bodyparsering which is a much less lenient form of post request processing then the bodyparser package(must specify application/json header)

Nodemon needs to be added

React-generator uses yarn and has a yarn.lock, it became a problem

Last updated