[React] ๐Ÿ“š ๋ฆฌ์ŠคํŠธ์™€ Key

pyeonneยท2022๋…„ 6์›” 25์ผ
0
post-thumbnail

๐Ÿ“‹ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

๐Ÿ“Œ key

  • Key๋Š” React๊ฐ€ ์–ด๋–ค ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝ, ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œํ• ์ง€ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์„ ๋•๋Š”๋‹ค.
  • Key๋Š” ์—˜๋ฆฌ๋จผํŠธ์— ์•ˆ์ •์ ์ธ ๊ณ ์œ ์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ ์—˜๋ฆฌ๋จผํŠธ์— ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • Key๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฆฌ์ŠคํŠธ์˜ ๋‹ค๋ฅธ ํ•ญ๋ชฉ๋“ค ์‚ฌ์ด์—์„œ ํ•ญ๋ชฉ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ํ•ญ๋ชฉ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ Key ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • map() ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์— key๋ฅผ ๋„ฃ์–ด ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • key๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ํ˜•์ œ ์‚ฌ์ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•˜๊ณ , ์ „์ฒด ๋ฒ”์œ„์—์„œ ๊ณ ์œ ํ•  ํ•„์š” ์—†๋‹ค.
  • key๋Š” ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

function Form() {
  function handleSubmit(e) {
    e.preventDefault();
    console.log('You clicked submit.');
  }

  return (
    <form onSubmit={handleSubmit}>
      <button type="submit">Submit</button>
    </form>
  );
}
  • ์ผ๋ฐ˜ HTML์—์„œ ํผ์„ ์ œ์ถœํ•  ๋•Œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ preventDefault๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ e๋Š” ํ•ฉ์„ฑ ์ด๋ฒคํŠธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • React๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ DOM ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด addEventListener๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์ฒ˜์Œ ๋ Œ๋”๋ง๋  ๋•Œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ๋œ๋‹ค.
  • ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ํ˜„์ƒ์„ ๋ง‰์œผ๋ ค๋ฉด stopPropagation() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“Œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};

    // ์ฝœ๋ฐฑ์—์„œ `this`๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”์ธ๋”ฉ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState(prevState => ({
      isToggleOn: !prevState.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

ReactDOM.render(
  <Toggle />,
  document.getElementById('root')
);
  • JavaScrip์—์„œ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
  • this.handleClifk์„ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๊ณ , onClick์— ์ „๋‹ฌํ•˜์˜€๋‹ค๋ฉด ํ•จ์ˆ˜๊ฐ€ ์‹ค์ œ ํ˜ธ์ถœ๋  ๋•Œ this๋Š” undefined๊ฐ€ ๋œ๋‹ค.
  • bind๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•˜๋‹ค๋ฉด, ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
    • ํผ๋ธ”๋ฆญ ํด๋ž˜์Šค ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ํด๋ž˜์Šค ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝœ๋ฐฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํด๋ž˜์Šค ํ•„๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋‹ค๋ฉด, ์ฝœ๋ฐฑ์— ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
    • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ฝœ๋ฐฑ์ด ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž ์•ˆ์—์„œ ๋ฐ”์ธ๋”ฉํ•˜๊ฑฐ๋‚˜ ํด๋ž˜์Šค ํ•„๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ๋ž˜ํผ๋Ÿฐ์Šค

profile
๊ฑด๊ฐ•ํ•œ ๋ชธ๊ณผ ๋งˆ์Œ์—์„œ ๊ฑด๊ฐ•ํ•œ ์ฝ”๋“œ๊ฐ€ ํƒœ์–ด๋‚œ๋‹ค !

0๊ฐœ์˜ ๋Œ“๊ธ€