Skip to content

sopra-steria-norge/code-academy-basic-react

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

code-academy-basic-react

Målet med workshoppen her er at du skal få praktisk kjennskap til "legoklossene" vi har sett på underveis i kvelden. For dere som har tidligere bygget enkle react-applikasjoner med f.eks "create-react-app" er det lett å ikke helt sette pris på hva som faktisk foregår i det du har kjørt "npm start" eller "npm run build".

I denne workshoppen skal går vi gjennom dette, steg for steg. Vi starter enkelt, og ønsker å sette opp en basic react app med typescript, som benytter seg av webpack og babel for transpilering og bygg.

Merk at hovedpoenget her ikke er å bli først ferdig, men å roe ned og prøve å forstå hvorfor hvert steg i worlshopen gjøres, og hva de ulike delene gjør. Bruk lenkene godt og fordyp deg om det er noe du ikke forstår.

Prerequisites

Workshop

  1. Sett opp en package.json med npm init -y
  2. Installer React, React DOM med kommandoen npm install --save react react-dom
  3. Installer Typescript med npm install --save-dev typescript. Nå som vi har fått på plass typescript er det en god i de å dra med seg typedeklerasjoner for pakkene vi benytter for react koden vår, kjør npm i --save-dev @types/react @types/react-dom. Legg merke til --save-dev. Om dette er ukjent for deg ville jeg tatt meg tiden til å se raskt på hvordan NPM strukturerer avhengigheter.
  4. Set opp webpack.config.js på rot
  5. Sett opp en basic tsconfig.json og legg den på rotnivå av repo. For nå holder det med
{
  "compilerOptions": {
    "target": "es5",
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"]
}
  1. Installer webpack med npm install --save-dev webpack webpack-cli webpack-dev-server
  2. Set opp webpack.config.js på rot
const path = require("path");

module.exports = {
  entry: "./src/index.tsx",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist"),
  },
  resolve: {
    extensions: [".tsx", ".ts", ".js"],
  },
};
  1. Installer Babel og aktuelle presets npm install --save-dev @babel/core babel-loader @babel/preset-env @babel/preset-react @babel/preset-typescript
  2. Set opp en .babelrc fil
{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react",
    "@babel/preset-typescript"
  ]
}

La oss ta en fot i bakken og lese oss raskt opp på hva disse preset'ene faktisk inneholder og gjør. Les doc'en før du går videre!

  1. La oss integrere webpack og babel! Oppdater webpack.config.js til å inkludere følgende
// ...
module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.(ts|tsx)$/,
        exclude: /node_modules/,
        use: "babel-loader",
      },
    ],
  },
};
  1. Sett opp ./src/index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Code Academy - React</title>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>
  1. For å få webpack til å spille på lag med html-filen over trenger vi en ny plugin - html-webpack-plugin! Les deg opp på hva den gjør her.
  2. Installer den npm install --save-dev html-webpack-plugin
  3. Oppdater webpack.config.js med den nye plugin'en, og pek den på filen vi opprettet over.
// ...
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  // ...
  plugins: [
    new HtmlWebpackPlugin({
      template: "./src/index.html",
    }),
  ],
};
  1. La oss opprette en enkel react-komponent - ./src/index.tsx
import React, { useState } from "react";
import ReactDOM from "react-dom/client";

const App: React.FC = () => {
  const [counter, setCounter] = useState(0);
  return (
    <div>
      <h2>Hei, verden! 😎</h2>
      <button onClick={() => setCounter(counter + 1)}>Klikk?</button>
      <p>Du har klikket på meg {counter} ganger🥵</p>
    </div>
  );
};

const rootElement = document.getElementById("root");
if (!rootElement) {
  throw new Error("root not found");
}
const root = ReactDOM.createRoot(rootElement);

root.render(<App />);
  1. Nå er alle småstegene underveis på plass, la oss oppdatere vår package.json til å dra nytte av oppsettet vårt! Legg til følgende:
"scripts": {
  "start": "webpack serve --open",
  "build": "webpack --mode production"
}
  1. Start opp appen med npm start. Dette skal forhåpentligvis starte opp applikasjonen og åpne den opp i nettleseren din.
  2. Legg merke til at webpack vil lytte på endringer på filene dine og serve disse på nytt. Hot reload!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published