Sobes.tech
Junior

Mis vahe on propsil ja olekul Reactis?

sobes.tech AI

Vastus AI-lt

Propid (props) ja seisund (state) on kaks peamist mehhanismi andmete haldamiseks Reacti komponentides.

Propid:

  • edastatakse vanemkomponentilt lapsekomponentile.
  • on lapsekomponenti sees muutumatud (immutable).
  • võimaldavad komponentidel omavahel suhelda.
  • määravad välimuse või käitumise sisendandmete põhjal.

Seisund:

  • kuulub konkreetsele komponendile ja seda hallatakse selle poolt.
  • on muutuv (mutable) komponendi sees.
  • esindab andmeid, mis võivad aja jooksul muutuda ja mõjutada komponendi renderdamist.
  • seisundi muutmine põhjustab komponendi ja selle järglaste uuesti renderdamise.

Peamised erinevused on esitatud tabelina:

Omadus Propid Seisund
Allikas Vanemkomponent Oma komponent
Muutuvus Muutumatu (immutable) Muutuv (mutable)
Juhtimine Edastatakse väljastpoolt Hallatakse komponendi sees
Otstarve Andmete kuvamine väljastpoolt, seadistamine Komponendi sisemise seisundi juhtimine
Muutmine põhjustab Uuesti renderdamise vanemal muutudes Uuesti renderdamise käigus muutudes selles komponendis

Näide propide kasutamisest:

// ParentComponent.jsx
import React from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const message = "Tere vanemalt!";
  return (
    <div>
      <ChildComponent text={message} /> {/* Prop "text" edastamine */}
    </div>
  );
}

export default ParentComponent;
// ChildComponent.jsx
import React from 'react';

function ChildComponent(props) {
  return (
    <p>{props.text}</p> {/* Prop "text" kasutamine */}
  );
}

export default ChildComponent;

Näide seisundi kasutamisest:

// Counter.jsx
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0); // Seisundi "count" initsialiseerimine

  const increment = () => {
    setCount(count + 1); // Seisundi muutmine
  };

  return (
    <div>
      <p>Loendur: {count}</p>
      <button onClick={increment}>Lisa</button>
    </div>
  );
}

export default Counter;