ReactJS-opetusohjelma aloittelijoille

โšก ร„lykรคs yhteenveto

ReactJS tukee lukemattomien nykyaikaisten verkkosivustojen ja mobiilisovellusten kรคyttรถliittymiรค. Tรคllรค sivulla selitetรครคn, mikรค kirjasto on, miten se otetaan kรคyttรถรถn ja miten komponentit, JSX, tila, propsit ja tapahtumat toimivat yhdessรค.

  • โš›๏ธ Foundation: ReactJS on avoimen lรคhdekoodin, komponenttipohjainen JavaFacebookissa (nykyรครคn Meta) luotu skriptikirjasto nopeiden ja interaktiivisten kรคyttรถliittymien rakentamiseen.
  • ๐Ÿงฉ Komponentit: Uudelleenkรคytettรคvรคt rakennuspalikat, jotka on kirjoitettu funktioina tai luokkina, jakavat kรคyttรถliittymรคlogiikan itsenรคisiksi, yllรคpidettรคviksi paloiksi.
  • ๐Ÿ“ JSX: A JavaSkriptisyntaksilaajennus antaa sinun kirjoittaa HTML-tyyppisiรค merkintรถjรค ja lausekkeita samaan tiedostoon.
  • ๐Ÿ”„ Valtio ja rekvisiitta: State tallentaa yksityistรค, muuttuvaa dataa komponentin sisรครคn, kun taas props vรคlittรครค siihen vain luku -tilassa olevaa dataa.
  • โš™๏ธ Asennuspolut: CDN-skriptitunnisteet sopivat nopeisiin kokeiluihin; npm-paketit tai Vite sopivat oikeisiin projekteihin.
  • ๐Ÿš€ Nykyaikainen kรคytรคntรถ: Hookeja sisรคltรคvรคt funktiokomponentit ja React 18+ createRoot API ovat nyt suositeltu standardi.
  • ๐Ÿ’ผ Uravaikutus: React-taidot ovat edelleen kysytyimpiรค front-end-kehittรคjien tyรถpaikkailmoituksissa maailmanlaajuisesti.

ReactJS-opetusohjelma aloittelijoille: Opi Reactin perusteet askel askeleelta

Mikรค on ReactJS?

ReactJS on avoimen lรคhdekoodin kรคyttรถliittymรค JavaSkriptikirjasto kรคyttรถliittymien rakentamiseen. ReactJS yllรคpitรครค Meta (entinen Facebook) ja yksittรคisten kehittรคjien ja yritysten yhteisรถ. Sitรค kรคytetรครคn laajalti pohjana yksisivuisten sovellusten ja mobiilisovellusten rakentamisessa. Se on erittรคin helppokรคyttรถinen ja antaa kรคyttรคjille mahdollisuuden luoda uudelleenkรคytettรคviรค kรคyttรถliittymรคkomponentteja.

Ennen kuin kirjoitat ensimmรคisen rivin React-koodia, on hyรถdyllistรค tietรครค, mikรค erottaa kirjaston tavallisesta koodista. JavaSkripti. Seuraavassa osiossa kรคydรครคn lรคpi sen ydinominaisuudet.

ReactJS:n ominaisuudet

JSX: JSX on laajennus JavaSkripti. Vaikka JSX:n kรคyttรถ Reactissa ei ole pakollista, se on yksi hyvistรค ominaisuuksista ja helppokรคyttรถinen.

komponentitKomponentit ovat kuin puhtaita JavaSkriptifunktiot, jotka helpottavat koodia jakamalla logiikan uudelleenkรคytettรคvรคksi itsenรคiseksi koodiksi. Voimme kรคyttรครค komponentteja funktioina ja komponentteja luokkina. Komponenteilla on myรถs tila ja propsit, mikรค helpottaa toimintaa. Luokkakomponentin sisรคllรค yllรคpidetรครคn tilaa ja propseja.

Virtuaalinen DOM: React luo virtuaalisen DOM:n eli muistissa olevan tietorakennevรคlimuistin. Vain lopulliset muutokset pรคivittyvรคt myรถhemmin selaimen DOM:iin, mikรค pitรครค renderรถinnin nopeana.

JavaSkriptilausekkeet: JS-lausekkeita voidaan kรคyttรครค JSX-tiedostoissa kรคyttรคmรคllรค aaltosulkeita, esimerkiksi {}.

ReactJS:n edut

Tรคssรค ovat ReactJS:n kรคytรถn tรคrkeรคt edut/hyรถdyt:

  • ReactJS kรคyttรครค virtuaalista DOMia, joka hyรถdyntรครค muistissa olevaa tietorakennevรคlimuistia, ja vain viimeiset muutokset pรคivitetรครคn selaimen DOMiin. Tรคmรค tekee sovelluksesta nopeamman.
  • Voit luoda haluamiasi komponentteja React-komponenttiominaisuuden avulla. Komponentteja voidaan kรคyttรครค uudelleen, ja ne ovat myรถs hyรถdyllisiรค koodin yllรคpidossa.
  • ReactJS on avoimen lรคhdekoodin JavaSkriptikirjasto, joten aloittaminen on helppoa.
  • ReactJS:stรค tuli lyhyessรค ajassa erittรคin suosittu ja se tukee tuotteita, kuten Facebookia ja InstagramSitรค kรคyttรคvรคt monet kuuluisat yritykset, kuten Apple, Netflix, Jne
  • Meta yllรคpitรครค ReactJS-kirjastoa, joten sitรค yllรคpidetรครคn hyvin ja pidetรครคn ajan tasalla.
  • ReactJS:รครค voidaan kรคyttรครค monipuolisen kรคyttรถliittymรคn kehittรคmiseen sekรค tyรถpรถytรค- ettรค mobiilisovelluksille.
  • Helppo virheenkorjaus ja testaus, koska suurin osa koodauksesta on tehty JavaKรคsikirjoitus HTML:n sijaan.

ReactJS:n haitat

Tรคssรค on ReactJS:n kรคytรถn haittoja/haittoja:

  • Suurin osa koodista on kirjoitettu JSX:llรค, eli HTML ja CSS ovat osa sitรค. JavaSkripti. Se voi olla melko hรคmmentรคvรครค, koska useimmat muut kehykset suosivat kee-komentosarjaa.ping HTML erillรครคn JavaKรคsikirjoituskoodi.
  • ReactJS:n tiedostokoko on suhteellisen suuri.

Tietรคen kompromissit, olet valmis asentamaan Reactin. Nopein tapa kokeilla sitรค on suoraan CDN:stรค, jota kรคsittelemme ensin; npm-pohjaiset asennukset oikeille projekteille seuraavat sen jรคlkeen.

ReactJS:n kรคyttรคminen CDN:stรค

Aloittaaksemme Reactin kรคytรถn meidรคn on ensin lisรคttรคvรค ReactJS sivullemme. Voit helposti aloittaa ReactJS:n kรคytรถn CDN:n kanssa. JavaSkriptitiedostot, kuten alla on esitetty.

Siirry vanhan Reactin dokumentaatiosivustolle saadaksesi CDN-linkit, eli https://legacy.reactjs.org/docs/cdn-links.html, ja saat tarvittavat tiedostot selitettynรค seuraavassa kuvassa.

ReactJS:n kรคyttรถ CDN:ssรค - React-dokumentaatio CDN-linkkisivu

Kehittรคjรคlle

<script crossorigin src="https://unpkg.com/react@version/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@version/umd/react-dom.development.js"></script>

Tuot

<script crossorigin src="https://unpkg.com/react@version/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@version/umd/react-dom.production.min.js"></script>

korvata versio haluamallasi React-versiolla sekรค react.development.js:lle ettรค react-dom.development.js:lle. Kรคytรคmme tรคllรค sivulla versiota 16, joten alla olevat esimerkit toimivat muuttumattomina.

๐Ÿ’ก Huomaa: Nรคmรค UMD/CDN-koontiversiot ovat vanha lรคhestymistapa, joka toimii React 18:aan asti ja sopii edelleen oppimiseen. React 19 ei enรครค toimita UMD-koontiversioita, ja React 18+ on korvattu. ReactDOM.render createRoot โ€” katso React-versioita kรคsittelevรค osio tรคmรคn sivun loppupuolella.

Jos aiot kรคyttรครค CDN-tiedostoja, varmista, ettรค sรคilytรคt crossorigin-attribuutin verkkotunnusten vรคlisten ongelmien vรคlttรคmiseksi. ReactJS-koodia ei voida suorittaa suoraan selaimessa, ja se on kรครคnnettรคvรค Babelin avulla tavalliseen muotoon. JavaSkripti ennen sen suorittamista selaimessa.

Tรคssรค on BabelJS-skripti, jota voidaan kรคyttรครค:

<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

Tรคssรค on toimiva ReactJS-esimerkki, jossa kรคytetรครคn CDN-tiedostoja ja BabelJS-skriptiรค.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello World</title>
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/babel">
      ReactDOM.render(
        <h1>Hello, from Guru99 Tutorials!</h1>,
        document.getElementById('app')
      );
   </script>
  </body>
</html>

lรคhtรถ:

CDN-pohjaisen ReactJS-esimerkin Hello World -tuloste

Seuraavassa luvussa perehdymme koodin yksityiskohtiin; katsotaanpa, miten CDN-tiedostojen kanssa tyรถskennellรครคn. Babel-skriptin kรคyttรถ suoraan ei ole hyvรค kรคytรคntรถ, ja aloittelijoiden tulisi kรคyttรครค sitรค toistaiseksi vain ReactJS:n oppimiseen. Tuotannossa sinun on asennettava React npm-paketilla.

NPM-pakettien kรคyttรถ

Varmista, ettรค Node.js on asennettu. Jos sitรค ei ole asennettu, katso tรคmรค Node.js-opastusvideo (https://www.guru99.com/node-js-tutorial.html) asennus.

Kun olet asentanut Node.js:n, luo kansio reactproj/.

Aloita projektin mรครคrittรคminen suorittamalla komento npm init.

Nรคin kansiorakenne nรคyttรครค:

reactproj\
package.json

Nyt asennamme tarvitsemamme paketit.

Tรคssรค on luettelo ReactJS-paketeista. Kiinnitรคmme Reactin versioon 16, jotta ReactDOM.render Tรคmรคn sivun esimerkit toimivat tรคsmรคlleen nรคin:

npm install react@16 --save
npm install react-dom@16 --save
npm install react-scripts --save

Avaa komentokehote ja suorita yllรค olevat komennot reactproj/-kansiossa.

Luo kansio src / jonne kaikki JS-koodi menee. Kaikki ReactJS-projektin koodi on saatavilla src/-kansiossa. Luo tiedosto index.js ja tuo siihen react ja react-dom, kuten alla on esitetty.

index.js

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

Olemme kirjoittaneet ReactJS:n peruskoodin. Selitรคmme sen yksityiskohdat seuraavassa luvussa. Haluamme nรคyttรครค Hei, tรครคltรค Guru99 opetusohjelmaa, ja sama annetaan DOM-elementille, jonka id on โ€rootโ€. Se otetaan index.html-tiedostosta, joka on aloitustiedosto, kuten alla on esitetty.

Luo public/-kansio ja lisรครค siihen index.html alla olevan kuvan mukaisesti.

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
   </body>
</html>

Paketti react-scripts hoitaa koodin kรครคntรคmisen ja palvelimen kรคynnistรคmisen HTML-tiedoston, eli index.html:n, nรคyttรคmiseksi. Sinun on lisรคttรคvรค package.json-tiedostoon komento, joka huolehtii koodin kรครคntรคmisestรค ja palvelimen kรคynnistรคmisestรค react-scriptsien avulla, kuten alla on esitetty:

 "scripts": {
    "start": "react-scripts start"
  }

Kun olet asentanut kaikki paketit ja lisรคnnyt yllรค olevan komennon, lopullinen package.json on seuraava:

Package.json

{
  "name": "reactproj",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "react-scripts start"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-scripts": "^3.1.1"
  }
}

Aloita ReactJS:n testaus suorittamalla komento:

npm run start
C:\reactproj>npm run start
> reactproj@1.0.0 start C:\reactproj
> react-scripts start

Se avaa selaimen, jossa on URL http://localhost:3000/ kuten alla:

public/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Selaimen tuloste npm-pohjaisen React-projektin suorittamisen jรคlkeen

Aiomme kรคyttรครค samaa prosessia suorittaaksemme JavaSkriptitiedostoja myรถs seuraavissa luvuissa. Lisรครค kaikki .js- ja .jsx-tiedostosi src/-kansioon. Tiedostorakenne on seuraava:

reactproj/
	 src/
	    index.js
	 node_modules/
	 public/
                index.html
	 package.json

Kuinka luoda First React -projektiasetuksesi

Tรคssรค ReactJS-opetusohjelmassa on vaiheittainen opas ensimmรคisen React-sovelluksen aloittamiseen.

Vaihe 1) Tuo reaktiopaketit.
1. ReactJS:n aloittamiseksi meidรคn on ensin tuotava react-paketit seuraavasti.

import React from 'react';
import ReactDOM from 'react-dom';

2. Tallenna tiedosto nimellรค index.js src/-kansioon.

Vaihe 2) Kirjoita yksinkertainen Code.
Kirjoitamme tรคhรคn opetusohjelmaan React JS yksinkertaisen koodin, jossa nรคytรคmme viestin "Hei, tรครคltรค Guru99 opetusohjelmaa!

ReactDOM.render(

<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

ReactDOM.render lisรครคn tagin elementtiin, jonka id on root. Tรคssรค on HTML-tiedosto, joka meillรค on:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Vaihe 3) Kรครคnnรค Code.

Seuraavaksi tรคssรค React.js-opetusohjelmassa meidรคn on kรครคnnettรคvรค koodi saadaksemme tulosteen selaimeen.

Tรคssรค on kansiorakenne:

reactproj/
     node_modules/
     src/
       index.js
     package.json
     public/
          index.html

Olemme lisรคnneet komennot lopullisen tiedoston kรครคntรคmiseksi package.json-tiedostoon seuraavasti:

"scripts": {
    "start": "react-scripts start"
  },

Lopullisen tiedoston kรครคntรคmiseksi suorita seuraava komento:

npm run start

Kun suoritat yllรค olevan komennon, se kรครคntรครค tiedostot ja ilmoittaa sinulle, jos tapahtuu virhe. Jos kaikki nรคyttรครค hyvรคltรค, se avaa selaimen ja suorittaa sivun osoitteessa http://localhost:3000/

Komento: npm ajon aloitus:

C:\reactproj>npm run start

> reactproj@1.0.0 start C:\reactproj
> react-scripts start

Vaihe 4) Tarkista lรคhtรถ.
URL http://localhost:3000 avautuu selaimessa, kun koodi on kรครคnnetty, kuten alla nรคkyy:

First React -projektin tuloste selaimessa

Reactin kรคyttรถรถnotto Viten avulla (moderni lรคhestymistapa)

Yllรค oleva react-skriptien asennus on perรคisin Create React Appista (CRA), joka oli vakioaloitustyรถkalu vuosien ajan. React-tiimi vanhensi Create React Appin virallisesti helmikuussa 2025, joten uusien projektien tulisi kรคyttรครค sen sijaan modernia rakennustyรถkalua. Nykyรครคn suosituin vaihtoehto on ruuvi, joka kรคynnistyy nopeammin ja tuottaa pienempiรค koonnoksia.

Nรคin luot uuden React-projektin Vitellรค:

Vaihe 1) Suorita scaffolding-komento terminaalissasi:

npm create vite@latest my-react-app -- --template react

Vaihe 2) Siirry kansioon ja asenna riippuvuudet:

cd my-react-app
npm install

Vaihe 3) Kรคynnistรค kehityspalvelin:

npm run dev

Vite tarjoaa sovellusta osoitteessa http://localhost:5173/ oletuksena ja latautuu uudelleen vรคlittรถmรคsti, kun tallennat tiedoston.

Tรคrkeimmรคt erot tรคllรค sivulla olevaan vanhempaan asetukseen verrattuna:

  • Merkintรคtiedosto on src/main.jsx src/index.js:n sijaan.
  • Se asentaa uusimman Reactin, joka kรคyttรครค createRoot ReactDOM.renderin sijaan.
  • index.html sijaitsee projektin juuressa, ei public/-hakemistossa.
  • Rakennukset tuotetaan npm run build dist/-kansioon.

Tรคyden pinon tarpeisiin, kuten reititykseen ja palvelimen renderรถintiin, React-tiimi suosittelee myรถs frameworkeja, kuten Next.jsKaikki alla olevissa luvuissa opittu โ€“ JSX, komponentit, tila ja propsit โ€“ pรคtee muuttumattomana Vite- tai Next.js-projektissa.

Mikรค on JSX?

JSX on laajennus JavaSkripti. Se on malliskripti, jossa voit kรคyttรครค HTML:รครค ja JavaKรคsikirjoitus yhdessรค.

Tรคssรค on yksinkertainen esimerkki JSX-koodista.

const h1tag = "<h1>Hello, from Guru99 Tutorials!</h1>";

Miksi tarvitsemme JSX:รครค Reactissa?

Kรคyttรถliittymรครค varten tarvitsemme HTML:รครค, ja jokaisella DOM-elementillรค on kรคsiteltรคvรคt tapahtumat, tilamuutokset jne.

Reactin tapauksessa se antaa meille mahdollisuuden hyรถdyntรครค HTML:รครค ja JavaSkriptaa samaan tiedostoon ja hoida DOM:n tilamuutokset tehokkaasti.

JSX:n lausekkeet

Tรคssรค on yksinkertainen esimerkki lausekkeiden kรคytรถstรค JSX:ssรค.

Aiemmissa ReactJS-esimerkeissรค olimme kirjoittaneet jotain tรคllaista:

index.js

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

Muutamme nyt yllรค olevaa koodia lisรคtรคksemme lausekkeita. Lausekkeita kรคytetรครคn aaltosulkeiden {} sisรคllรค, ja niitรค laajennetaan suorituksen aikana. Reactin lausekkeet ovat samat kuin JavaSkriptilausekkeet.

index.js

import React from 'react';
import ReactDOM from 'react-dom';

const display = "Hello, from Guru99 Tutorials!";
const h1tag = "<h1>{display}</h1>";
ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Testataan nyt samaa selaimessa.

Lausekkeet JSX:ssรค - korvaamattoman lausekkeen tuloste selaimessa

Yllรค olevasta kuvakaappauksesta nรคet, ettรค {display}-lauseketta ei korvata. React ei tiedรค, mitรค tehdรค, kun lauseketta kรคytetรครคn .js-tiedoston sisรคllรค.

Lisรคtรครคn nyt muutoksia ja luodaan .jsx-tiedosto alla olevan kuvan mukaisesti:

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

const display = "Hello, to Guru99 Tutorials";
const h1tag =<h1>{display}</h1>;
export default h1tag;

Olemme lisรคnneet tarvittavan koodin ja kรคytรคmme test.jsx-tiedostoa index.js-tiedostossa. Haluamme, ettรค h1tag muuttujaa kรคytetรครคn index.js-tiedoston sisรคllรค, joten sama viedรครคn kuten yllรค on esitetty test.jsx-tiedostossa.

Tรคssรค on muokattu koodi index.js-tiedostossa:

import React from 'react';
import ReactDOM from 'react-dom';
import h1tag from './test.jsx';

ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Jotta voimme kรคyttรครค test.jsx-tiedostoa index.js-tiedostossa, meidรคn on ensin tuotava se alla olevan mukaisesti:

import h1tag from './test.jsx';

Voimme kรคyttรครค h1tagia nyt ReactDOM.renderissรค alla esitetyllรค tavalla:

ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Tรคssรค on tulos, kun tarkistamme saman selaimessa:

JSX-lauseke renderรถitiin oikein selaimessa

Mitรค komponentit ovat ReactJS:ssรค?

Komponentit ovat kuin puhtaita JavaSkriptifunktiot, jotka helpottavat koodia jakamalla logiikan uudelleenkรคytettรคvรคksi itsenรคiseksi koodiksi.

Komponentit funktioina

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';
function Hello() {
    return <h1>Hello, from Guru99 Tutorials!</h1>;
}
const Hello_comp = <Hello />;
export default Hello_comp;

Olemme luoneet funktion nimeltรค Hei joka palauttaa h1-tagin, kuten yllรค on esitetty. Funktion nimi toimii elementtinรค, kuten alla on esitetty:

const Hello_comp = <Hello />;
export default Hello_comp;

Komponentti Hei kรคytetรครคn HTML-tagina, ts. , osoitettu Hello_comp muuttuja, ja sama viedรครคn vientikomennolla.

Kรคytetรครคn nyt tรคtรค komponenttia index.js-tiedostossa alla olevan mukaisesti:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './test.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Tรคssรค tuloste selaimessa:

Funktiokomponentin tuloste ReactJS:ssรค

Luokka komponentiksi

Tรคssรค on ReactJS-esimerkki, joka kรคyttรครค luokkaa komponenttina.

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  render() {
    return <h1>Hello, from Guru99 Tutorials!</h1>;
  }
}
export default Hello;

Voimme kรคyttรครค index.js-tiedoston Hello-komponenttia seuraavasti:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello />,
    document.getElementById('root')
);

Hello-komponenttia kรคytetรครคn HTML-tagina, ts. .

Tรคssรค saman tulos.

Luokka komponenttina tulosteena selaimessa

Luokkakomponentit vs. funktiokomponentit ja koukut

Olet nyt nรคhnyt molemmat tavat kirjoittaa komponentti, joten kumpaa sinun pitรคisi kรคyttรครค? Tรคmรค sivu opettaa luokkakomponentteja, koska ne tekevรคt tila- ja elinkaarikรคsitteet eksplisiittiseksi, mikรค on hyรถdyllistรค aloittelijoille ja esiintyy edelleen vanhoissa koodikannoissa. Koska React 16.8 esitteli Hookit, myรถs funktiokomponentit voivat sisรคltรครค tilan, ja ne ovat suositeltu tyyli kaikelle uudelle koodille.

Aspect Luokan komponentti Toimintokomponentti koukkujen kanssa
Osavaltio this.state ja this.setState() useState()-koukku
Lifecycle komponenttiDidMount, komponenttiDidUpdate, komponenttiWillUnmount useEffect() Hook kattaa kaikki kolme
Syntaksi Lisรครค mallipohjaa (konstruktori, sidonta, tรคmรค) Lyhyempi, ei tรคtรค avainsanaa
Tila Tuettu, vanha tyyli Suositellaan uudelle koodille

Tรคssรค on tรคltรค sivulta lรถytyvรค tilaesimerkki, joka on kirjoitettu uudelleen useState-koukulla:

import React, { useState } from 'react';

function Hello() {
  const [msg] = useState("Hello, from Guru99 Tutorials!");
  return <h1>{msg}</h1>;
}
export default Hello;

Molemmat versiot renderรถivรคt saman tulosteen. Opi alla olevissa luvuissa kรคytetty luokkasyntaksi ja harjoittele sitten kunkin esimerkin muuntamista Hookeiksi.

Mikรค on tila ReactJS:ssรค?

Valtio on JavaSkriptiobjekti, samanlainen kuin props, joka sisรคltรครค ReactJS-renderรถinnin kanssa kรคytettรคvรครค dataa. Tiladata on yksityinen objekti ja sitรค kรคytetรครคn luokan sisรคllรค olevissa komponenteissa.

Esimerkki valtiosta

Tรคssรค on toimiva esimerkki tilan kรคytรถstรค luokan sisรคllรค.

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
       msg: "Hello, from Guru99 Tutorials!"
    }
  }
  render() {
    return <h1>{this.state.msg}</h1>;
  }
}
export default Hello;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello />,
    document.getElementById('root')
);

Tรคmรคn saamme, kun testaamme sitรค selaimessa:

ReactJS-tulosteen tila, joka nรคyttรครค viestin tilasta

Mitรค rekvisiitta ReactJS:ssรค ovat?

Propit ovat komponentin sisรคllรค kรคytettรคviรค ominaisuuksia. Ne toimivat globaaleina objekteina tai muuttujina, joita voidaan kรคyttรครค komponentin sisรคllรค.

Rekvisiitta toiminnalliseen komponenttiin

Tรคssรค on esimerkki rekvisiittajen vรคlittรคmisestรค funktiokomponenttiin.

import React from 'react';
import ReactDOM from 'react-dom';
function Hello(props) {
    return <h1>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

Kuten yllรค on esitetty, olemme lisรคnneet mm. msg ominaisuus komponentti. Samaan pรครคsee kรคsiksi nimellรค rekvisiitta Hello-funktion sisรคllรค, joka on objekti, jolla on msg attribuutin tiedot, ja samaa kรคytetรครคn lausekkeena.

Komponenttia kรคytetรครคn index.js:ssรค seuraavasti:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './test.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Tรคssรค tuloste selaimessa:

Rekvisiitta funktiokomponentin tulosteeseen selaimessa

Rekvisiitta luokan komponenttiin

Pรครคstรคksemme kรคsiksi luokan propseihin, voimme tehdรค sen seuraavasti:

test.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  render() {
    return <h1>{this.props.msg}</h1>;
  }
}
export default Hello;

msg attribuutti vรคlitetรครคn index.js:n komponentille seuraavasti:

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello msg="Hello, from Guru99 Tutorials!" />,
    document.getElementById('root')
);

Tรคmรค on selaimen tulos:

Luokkakomponentin tulosteen ominaisuudet selaimessa

Tarkista myรถs: - AngularJS-opastus aloittelijoille: Opi AngularJS askel askeleelta

Komponentin elinkaari

Kun komponentit, tila ja propsit on kรคsitelty, seuraava askel on ymmรคrtรครค, milloin React kutsuu komponenttiesi metodeja. Komponentin elinkaari jaetaan alustus-, asennus-, pรคivitys- ja irrotusvaiheisiin.

Tรคssรค on yksityiskohtainen selitys jokaisesta vaiheesta.

ReactJS:n komponentilla on seuraavat vaiheet:

Alustus: Tรคmรค on komponenttien elinkaaren ensimmรคinen vaihe.

Tรครคllรค sillรค on oletusrekvisiitta ja tila alkuperรคisellรค tasolla.

AsennusTรคssรค vaiheessa komponentti renderรถidรครคn DOM:n sisรคllรค. Kรคytettรคvissรคmme ovat seuraavat metodit liitostilassa:

  • render(): Tรคmรค metodi on kรคytettรคvissรค kaikille luoduille komponenteille. Se palauttaa HTML-solmun.
  • componentDidMount(): Tรคtรค kutsutaan heti komponentin lisรครคmisen jรคlkeen DOM:iin.

PรคivityksetTรคssรค tilassa kรคyttรคjรค on vuorovaikutuksessa DOM:n kanssa ja se pรคivittyy. Esimerkiksi kirjoittamalla jotain tekstikenttรครคn, tilan ominaisuudet pรคivittyvรคt.

Pรคivitystilassa kรคytettรคvissรค olevat menetelmรคt ovat seuraavat:

  • shouldComponentUpdate(): kutsutaan ennen uudelleenrenderรถintiรค; sen avulla voit pรครคttรครค, pรคivitetรครคnkรถ komponentti. Arvolla true komponentti renderรถidรครคn uudelleen.
  • componentDidUpdate(): kutsutaan komponentin pรคivityksen jรคlkeen.

Irrottaminen: Tรคmรค tila tulee kuvaan, kun komponenttia ei tarvita tai se poistetaan.

Seuraava on irrotustilassa kรคytettรคvissรค oleva menetelmรค:

  • componentWillUnmount(): kutsutaan juuri ennen komponentin poistamista tai tuhoamista.

Elinkaarimenetelmien tyรถesimerkki

Tรคssรค on toimiva esimerkki, joka nรคyttรครค kussakin vaiheessa kutsuttavat metodit.

Esimerkki: complife.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class COMP_LIFE extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.testclick = this.testclick.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  testclick(event) {
    alert("The name entered is: "+ this.state.name);
  }

  componentDidMount() {
    console.log('Mounting State : calling method componentDidMount');
  }

  shouldComponentUpdate() {
    console.log('Update  State : calling method shouldComponentUpdate');
    return true;
  }

  componentDidUpdate() {
    console.log('Update  State : calling method componentDidUpdate')
  }
  componentWillUnmount() {
    console.log('UnMounting State : calling method componentWillUnmount');
  }

  render() {
    return (
      <div>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="button" value="Click Here" onClick={this.testclick} />
      </div>
    );
  }
}

export default COMP_LIFE;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import COMP_LIFE from './complife.jsx';

ReactDOM.render(
    <COMP_LIFE />,
    document.getElementById('root')
);

Kun tarkistat tulosteen selaimessa:

Elinkaariesimerkki selaimessa renderรถitynรค

Selainkonsolissa nรคet:

Selainkonsolin tuloste, jossa nรคkyy componentDidMount-viesti

Kun kรคyttรคjรค kirjoittaa tekstiruutuun:

Tekstiruutuun syรถte pรคivittรครค komponentin tilaa

Konsolissa nรคkyvรคt seuraavat viestit:

Konsolin tuloste, joka nรคyttรครค pรคivitysten elinkaarimetodien kรคynnistymisen

Nyt kun tiedรคt, milloin komponentti renderรถidรครคn ja pรคivittyy, sovelletaanpa tilaa ja tapahtumia kรคytรคnnรถn kรคyttรถtapaukseen: kรคyttรคjรคn syรถtteen kรคsittelyyn lomakkeiden kautta.

Lomakkeiden kanssa tyรถskentely

ReactJS:ssรค HTML-syรถteelementit, kuten , , ja <select /> :lla on oma tilansa ja ne on pรคivitettรคvรค kรคyttรคjรคn vuorovaikutuksessa setState()-metodin avulla.

Tรคssรค luvussa nรคemme, miten lomakkeiden kanssa tyรถskennellรครคn ReactJS:ssรค.

Tรคssรค toimiva esimerkki:

form.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class Form extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.formSubmit = this.formSubmit.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  formSubmit(event) {
    alert("The name entered is: "+ this.state.name);
  }

  render() {
    return (
      <form>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="submit" value="Submit" onClick={this.formSubmit} />
      </form>
    );
  }
}

export default Form;

Syรถttรถkenttien osalta meidรคn on yllรคpidettรคvรค tilaa, joten sitรค varten React tarjoaa erityisen metodin nimeltรค setState, joka auttaa yllรคpitรคmรครคn tilaa aina muutoksen tapahtuessa. Todellisessa sovelluksessa kutsutaan myรถs event.preventDefault() formSubmit-komennon sisรคllรค estรครคksesi selainta lataamasta sivua uudelleen lรคhetyksen yhteydessรค.

Olemme kรคyttรคneet tekstiruudussa ja lรคhetรค-painikkeessa onChange- ja onClick-tapahtumia. Kun kรคyttรคjรค kirjoittaa tekstiruutuun, kutsutaan onChange-tapahtumaa ja tilaobjektin sisรคllรค oleva nimikenttรค pรคivittyy alla olevan mukaisesti:

UpdateName(event) {
    this.setState({name: event.target.value});
  }

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Form from './form.jsx';

ReactDOM.render(
    <Form />,
    document.getElementById('root')
);

Tulostus selaimessa on seuraava:

Lomakkeiden kanssa tyรถskentely - lomakkeen alkuperรคinen tuloste

Vaihe 1) Kirjoita nimesi tekstikenttรครคn:

Lomakkeiden kanssa tyรถskentely - tekstikenttรครคn syรถtetty nimi

Vaihe 2) Klikkaa lรคhetyspainiketta:

Lomakkeiden kanssa tyรถskentely - ilmoitus nรคytetรครคn lรคhetyksen jรคlkeen

Tyรถskentely tapahtumien kanssa ReactJS:ssรค

Lomakkeet ovat vain yksi kรคyttรคjรคn vuorovaikutuksen lรคhde. Tapahtumien kanssa tyรถskentely ReactJS:ssรค on sama kuin mitรค olisit tehnyt aiemminkin. JavaSkripti. Voit kรคyttรครค kaikkia tapahtumankรคsittelijรถitรค, joita kรคytetรครคn JavaSkripti. setState()-metodia kรคytetรครคn tilan pรคivittรคmiseen, kun kรคyttรคjรค on vuorovaikutuksessa minkรค tahansa HTML-elementin kanssa.

Tรคssรค on toimiva esimerkki tapahtumien kรคytรถstรค ReactJS:ssรค.

Events.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class EventTest extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.testclick = this.testclick.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  testclick(event) {
    alert("The name entered is: "+ this.state.name);
  }

  render() {
    return (
      <div>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="button" value="Click Here" onClick={this.testclick} />
      </div>
    );
  }
}

export default EventTest;

Syรถttรถkenttien osalta meidรคn on yllรคpidettรคvรค tilaa, joten React tarjoaa sitรค varten setState menetelmรค, joka auttaa yllรคpitรคmรครคn tilaa aina, kun tapahtuu muutos.

Olemme hyรถdyntรคneet tapahtumia muutamme ja klikkaamalla tekstikentรคssรค ja painikkeessa. Kun kรคyttรคjรค kirjoittaa tekstikenttรครคn, muutamme tapahtumaa kutsutaan ja tilaobjektin sisรคllรค oleva nimikenttรค pรคivitetรครคn alla olevan mukaisesti:

UpdateName(event) {
    this.setState({name: event.target.value});
  }

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import EventTest from './events.jsx';

ReactDOM.render(
    <EventTest />,
    document.getElementById('root')
);

Tรคssรค tuloste selaimessa:

Tapahtumien kรคsittely - alkutuloste selaimessa

Kun kรคyttรคjรค syรถttรครค nimen:

Tapahtumien kรคsittely - nimi nรคytetรครคn kรคyttรคjรคtyyppeinรค

Kun kรคyttรคjรค napsauttaa Napsauta tรคstรค -painiketta:

Tapahtumien kรคsittely - ilmoitus nรคytetรครคn painiketta napsautettaessa

Tyรถskentely Inline CSS:n kanssa ReactJS:ssรค

Kun komponenttisi kรคsittelevรคt dataa ja tapahtumia, viimeinen vaihe on niiden muotoilu. Tarkastelemme toimivaa esimerkkiรค ymmรคrtรครคksemme ReactJS:n inline-CSS:รครค.

addstyle.jsx

import React from 'react';
import ReactDOM from 'react-dom';

const h1Style = {
    color: 'red'
};

function Hello(props) {
    return <h1 style={h1Style}>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

Olen lisรคnnyt vรคrin 'punainen' tyylin h1-tagiin.

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './addstyle.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Tulostus selaimessa on seuraava:

Tyรถskentely Inline CSS:n kanssa - punainen otsikkotuloste

Voit luoda objektin, jonka elementtiin haluat tyylin, ja kรคyttรครค lauseketta tyylin lisรครคmiseen, kuten yllรค olevassa esimerkissรค on esitetty.

Tyรถskentely ulkoisen CSS:n kanssa ReactJS:ssรค

Luodaan ulkoinen CSS-tiedosto. Sitรค varten luodaan kansio css/ ja lisรคtรครคn siihen style.css.

style.css

.h1tag {
color:red;
}

Lisรครค style.css index.html-tiedostoosi

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Lisรคtรครคn nyt luokka .jsx-tiedoston h1-tagiin.

addstyle.jsx

import React from 'react';
import ReactDOM from 'react-dom';

let classforh1 = 'h1tag';

function Hello(props) {
    return <h1 className={classforh1}>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './addstyle.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

className-attribuutille annetaan luokan tiedot. Huomaa, ettรค JSX kรคyttรครค luokan nimi HTML-luokka-attribuutin sijaan, koska luokka on varattu avainsana HTML-koodissa JavaSkripti. Testataanpa sitรค nyt selaimessa.

Ulkoisen CSS:n kanssa tyรถskentely - tyylitelty otsikkotuloste

Nรคet tรคmรคn, kun tarkastelet h1-tagia selaimessa:

Ulkoisen CSS:n kanssa tyรถskentely - tarkastettu h1-tagi nรคyttรครค luokan

Voit nรคhdรค, ettรค class="h1tag" on lisรคtty onnistuneesti h1-tagiin.

Miksi ReactDOM.render korvattiin createRootilla

Jokainen tรคllรค sivulla oleva esimerkki liittรครค sovelluksen ReactDOM.renderillรค, mikรค pรคtee React 16- ja 17-versioihin, joihin tรคmรค kurssi on suunnattu. Maaliskuussa 2022 julkaistu React 18 korvasi kyseisen aloituskohdan createRoot-rajapinnalla, ja React 19 poisti ReactDOM.renderin kokonaan. Syynรค on samanaikaisuus: createRoot mahdollistaa Reactin valmistella useita kรคyttรถliittymรคversioita samanaikaisesti, keskeyttรครค matalan prioriteetin renderรถinnin ja pitรครค ty...ping ja animaatiot ovat sujuvia. Ominaisuudet, kuten automaattinen erรคajo, useTransition ja jรคnnityspohjainen suoratoisto, ovat kaikki siitรค riippuvaisia.

Tรคllรค sivulla kรคytetyn index.js:n moderni vastine nรคyttรครค tรคltรค:

import { createRoot } from 'react-dom/client';

const root = createRoot(document.getElementById('root'));
root.render(<h1>Hello, from Guru99 Tutorials!</h1>);

Kaikki muu tรคssรค oppimasi โ€“ komponentit, JSX, tila, propsit ja tapahtumat โ€“ toimivat samalla tavalla tรคmรคn aloituskohdan yhden rivin muutoksen jรคlkeen. Tรคllaisia โ€‹โ€‹versioeroja esiintyy usein React JS -haastattelukysymykset, joten kannattaa ymmรคrtรครค molemmat API:t.

UKK

ReactJS on kirjasto, ei kokonainen kehys. Se keskittyy vain kรคyttรถliittymรคn rakentamiseen. Reititystรค, tiedonhakua ja palvelimen renderรถintiรค varten kehittรคjรคt yhdistรคvรคt sen tyรถkaluihin, kuten React Router, tai kehyksiin, kuten Next.js.

Kiinteรคllรค JavaSkriptien perusteet: useimmat oppijat hallitsevat komponentit, JSX:n, tilan ja propsit kahdessa tai neljรคssรค viikossa sรครคnnรถllisellรค harjoittelulla. Tyรถvalmiuteen pรครคseminen, mukaan lukien Hookit, reititys ja API-kutsujen rakentaminen, vie tyypillisesti kahdesta kolmeen kuukautta pienten projektien rakentamista.

ReactJS renderรถi selaimen DOM:lle verkkosivustojen rakentamiseksi, kun taas React Native kรคyttรครค samaa komponenttimallia natiivin iOS:n ja Android sovellukset. Taidot siirtyvรคt kahden vรคlillรค, mutta React Native korvaa HTML-tagit natiiveilla kรคyttรถliittymรคkomponenteilla.

Kyllรค. Avustajat, kuten GitHub Copilot ja ChatGPT osaa scaffoldida komponentteja, selittรครค virheitรค ja muuntaa luokkakomponentteja Hookeiksi. Tarkista aina luotu koodi, koska tekoรคly voi ehdottaa vanhentuneita API-rajapintoja, kuten ReactDOM.render.

Lรคhitulevaisuudessa epรคtodennรคkรถistรค. Tekoรคly nopeuttaa rutiinikoodausta, mutta kehittรคjiรค tarvitaan edelleen komponenttiarkkitehtuurin suunnitteluun, sovelluksen tilan hallintaan, esteettรถmyyden tarkistamiseen ja tuotanto-ongelmien vianmรครคritykseen. Reactin ja tekoรคlyn avustamien tyรถnkulkujen oppiminen tekee sinusta arvokkaamman, ei vรคhemmรคn arvokkaan.

Tarkista myรถs: - 70 suosituinta React-haastattelun kysymystรค ja vastausta (pรคivitetty)

Tiivistรค tรคmรค viesti seuraavasti: