๐Ÿ“š React Components โ€“ ื”ืžื“ืจื™ืš ื”ืžืœื

1. ืžื”ื• Component ?

Component ื”ื•ื ืคื•ื ืงืฆื™ื™ืช JavaScript ืฉืžื—ื–ื™ืจื” JSX. ื”ื•ื ืžื™ื™ืฆื’ ื™ื—ื™ื“ืช-UI ืขืฆืžืื™ืช ื•ืœื›ืŸ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ืฉื•ื‘, ืœืืชืจ ื‘ืื’ื™ื ื‘ืงืœื•ืช ื•ืœื‘ื“ื•ืง ืื•ืชื• ื‘ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื”.

function Header() {
  return (
    <header>
      <h1>ืจื›ื™ื‘ Header</h1>
    </header>
  );
}

function Main() {
  return (
    <section>
      <p>ืจื›ื™ื‘ Main</p>
    </section>
  );
}

function App() {
  return (
    <div>
      <Header />
      <Main />
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));
React - ื”ืฆื’ืช ืฆื“ ืœืงื•ื—

2. Properties (props)

props ื”ื ื ืชื•ื ื™ื ื—ื™ืฆื•ื ื™ื™ื ืฉื”ืจื›ื™ื‘ ืžืงื‘ืœ, ื•ื›ืš ื”ื•ืคืš ืœื“ื™ื ืžื™ ื•ืฉื™ืžื•ืฉื™ ื‘ืžืฆื‘ื™ื ืจื‘ื™ื.

function Header(props) {
  return <h1>ืฉืœื•ื, {props.name}</h1>;
}

function Main(props) {
  return <p>ืื ื—ื ื• {props.adjective}</p>;
}

function App() {
  return (
    <div>
      <Header name="React Master" />
      <Main adjective="ื’ืžื™ืฉื™ื ื•ืžื”ื™ืจื™ื" />
    </div>
  );
}

3. ื™ืฆื™ืจืช ืจืฉื™ืžื•ืช + keys

function Main(props) {
  return (
    <ul>
      {props.dishes.map(dish => (
        <li key={dish}>{dish}</li>
      ))}
    </ul>
  );
}

4. ื”ื•ืกืคืช ืชืžื•ื ื•ืช

ื‘-Next.js ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘-<Image /> ืœืงื‘ืœืช Lazy-load.

๐ŸŒ The Virtual DOM

React ื™ื•ืฆืจ DOM ื‘ื–ื™ื›ืจื•ืŸ ื•ืžืฉื•ื•ื” ืื•ืชื• ืœืคื ื™ ืขื“ื›ื•ืŸ:

  • React ื™ื•ืฆืจ ืขื•ืชืง ื‘ื–ื™ื›ืจื•ืŸ
  • ืžื‘ืฆืข Diff ืœืขื•ืžืช ื”ืงื•ื“ื
  • ืจืง ืฉื™ื ื•ื™ื™ื ืžืขื•ื“ื›ื ื™ื ื‘ืคื•ืขืœ

ืžืืคืฉืจ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ื’ื ื‘ืืชืจื™ื ื’ื“ื•ืœื™ื.

React ืžืขื“ื›ืŸ ืืช ื”-DOM ื‘ืืœืžื ื˜ื™ื ืฉื”ืฉืชื ื•, ืžื” ืฉืœื ื™ืฉืชื ื” ืœื ื™ืขื•ื“ื›ืŸ. ื–ื” ื ืขืฉื” ื‘ืืžืฆืขื•ืช virtual DOM.

ืœื“ื•ื’ืžื”, ื ื ื™ื— ืฉื™ืฉ ืœืš ืจืฉื™ืžื” ื”ืžื›ื™ืœื” ืขืฉืจื” ืคืจื™ื˜ื™ื. ืืชื” ืžืกืžืŸ ืืช ื”ืคืจื™ื˜ ื”ืจืืฉื•ืŸ. ืžืจื‘ื™ืช ืžืกื’ืจื•ืช ื”-JavaScript ื™ื‘ื ื• ืžื—ื“ืฉ ืืช ื”ืจืฉื™ืžื” ื›ื•ืœื”. ื–ื• ืขื‘ื•ื“ื” ืคื™ ืขืฉืจื” ืžื”ื ื“ืจืฉ! ืจืง ืคืจื™ื˜ ืื—ื“ ื”ืฉืชื ื”, ืืš ืชืฉืขืช ื”ื ื•ืชืจื™ื ื ื‘ื ื™ื ืžื—ื“ืฉ ื‘ื“ื™ื•ืง ื›ืคื™ ืฉื”ื™ื• ื‘ืขื‘ืจ.

ื‘ื ื™ื™ืช ืจืฉื™ืžื” ืื™ื ื” ืขื ื™ื™ืŸ ื’ื“ื•ืœ ืœื“ืคื“ืคืŸ ืื™ื ื˜ืจื ื˜, ืืš ืืชืจื™ื ืžื•ื“ืจื ื™ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื›ืžื•ื™ื•ืช ืขืฆื•ืžื•ืช ืฉืœ ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ DOM. ืขื“ื›ื•ืŸ ืœื ื™ืขื™ืœ ื”ืคืš ืœื‘ืขื™ื” ื—ืžื•ืจื”.

ื›ื“ื™ ืœื˜ืคืœ ื‘ื‘ืขื™ื” ื–ื•, ืื ืฉื™ ื”-React ืคื™ืชื—ื• ืืช ื”ึพDOM ื”ื•ื•ื™ืจื˜ื•ืืœื™.

ื‘-React, ืœื›ืœ ืื•ื‘ื™ื™ืงื˜ DOM ื™ืฉื ื• "ืื•ื‘ื™ื™ืงื˜ DOM ื•ื™ืจื˜ื•ืืœื™". ื–ื”ื• ื™ื™ืฆื•ื’ ืฉืœ ืื•ื‘ื™ื™ืงื˜ DOM ืืžื™ืชื™ โ€“ ื›ืžื• ืขื•ืชืง ืงืœ.

ื™ืฉ ืœื• ืืช ืื•ืชื ืžืืคื™ื™ื ื™ื ืฉืœ DOM ืืžื™ืชื™, ืืš ื”ื•ื ืœื ืžืฉื ื” ื‘ืืžืช ืืช ื”ืžืกืš. ื”ื˜ื™ืคื•ืœ ื‘ื• ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ื™ืจ, ื›ื™ ืœื ืžืชื‘ืฆืขืช ืจื™ื ื“ื•ืจ ืืžื™ืชื™. ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืืช ื–ื” ื›ืžื• ืขืจื™ื›ืช ืฉืจื˜ื•ื˜, ืœืขื•ืžืช ืžืขื‘ืจ ืืžื™ืชื™ ื‘ื™ืŸ ื—ื“ืจื™ื ื‘ื‘ื™ืช.

ื›ืืฉืจ ืืชื” ืžืขื‘ื“ ืืœืžื ื˜ JSX, ื›ืœ ืื•ื‘ื™ื™ืงื˜ DOM ื•ื™ืจื˜ื•ืืœื™ ืžืชืขื“ื›ืŸ.

ื–ื” ื ืฉืžืข ืœื ื™ืขื™ืœ ืœื”ืคืœื™ื, ืืš DOM ื•ื™ืจื˜ื•ืืœื™ ื›ืœ ื›ืš ืžื”ื™ืจ ืฉื–ื” ืœื ืžืฉืžืขื•ืชื™.

ืœืื—ืจ ืžื›ืŸ React ืžืฉื•ื•ื” ืืช ื”-DOM ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืขื ืชืžื•ื ืช DOM ื•ื™ืจื˜ื•ืืœื™ืช ืฉืฆื•ืœืžื” ืœืคื ื™ ื”ืขื“ื›ื•ืŸ.

ื‘ืืžืฆืขื•ืช ื”ื”ืฉื•ื•ืื” ื”ื–ื• (ื ืงืจืืช diffing), React ืžื’ืœื” ื‘ื“ื™ื•ืง ืื™ืœื• ืืœืžื ื˜ื™ื ื”ืฉืชื ื•, ื•ืจืง ืื•ืชื ื”ื•ื ืžืขื“ื›ืŸ ื‘-DOM ื”ืืžื™ืชื™.

ื‘ื“ื•ื’ืžื” ืฉืœื ื• ืžืงื•ื“ื, React ื™ื”ื™ื” ืžืกืคื™ืง ื—ื›ื ื›ื“ื™ ืœื‘ื ื•ืช ืžื—ื“ืฉ ืจืง ืืช ืคืจื™ื˜ ื”ืจืฉื™ืžื” ื”ืžืกื•ืžืŸ ื•ืœื”ืฉืื™ืจ ืืช ืฉืืจ ื”ืจืฉื™ืžื” ืœืœื ืฉื™ื ื•ื™.

ื–ื” ืขื•ืฉื” ื”ื‘ื“ืœ ื’ื“ื•ืœ! React ื™ื›ื•ืœ ืœืขื“ื›ืŸ ืจืง ืืช ื”ื—ืœืงื™ื ื”ื“ืจื•ืฉื™ื ื‘-DOM. ื”ืžื•ื ื™ื˜ื™ืŸ ืฉืœ React ื‘ื‘ื™ืฆื•ืขื™ื ื ื•ื‘ืข ื‘ืžื™ื“ื” ืจื‘ื” ืžื—ื™ื“ื•ืฉ ื–ื”.

ืœืกื™ื›ื•ื:

  • ื›ืœ ื”-DOM ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืžืชืขื“ื›ืŸ
  • ื”ื•ื ืžื•ืฉื•ื•ื” ืœืžื” ืฉื”ื™ื” ืœืคื ื™ ื›ืŸ
  • React ืžืขื“ื›ืŸ ืจืง ืืช ืžื” ืฉื”ืฉืชื ื” ื‘-DOM ื”ืืžื™ืชื™
  • ืจืง ืื– ื”ืžืกืš ืžืฉืชื ื” ื‘ืคื•ืขืœ