[Reacte] Component Event ๋งŒ๋“ค๊ธฐ

2021. 10. 2. 08:02ใ†Front-End ์ž‘์—…์‹ค/Vue.js

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿ“Œ ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ ๋งŒ๋“ค๊ธฐ


 

return (
  // Component๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์ตœ์ƒ์œ„ Tag๋งŒ (๋”ฑ ํ•˜๋‚˜) ์จ์•ผ ํ•œ๋‹ค.
  <header>
    <h1><a href ="/" onClick={function(e) {
    e.preventDefault();

    this.props.onChangePage();

    }.bind(this)}> {this.props.title}</a></h1>
    {this.props.sub}
  </header>
);

 

์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ,

 

<Subject
  title={this.state.subject.title}
  sub={this.state.subject.sub}
  onChangePage = 
  >
</Subject>

 

์œ„์™€ ๊ฐ™์ด onChanePage๋ผ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํŠน์ • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

App.js์—์„œ ์œ„์™€ ๊ฐ™์ด onChanePage Event์— ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ ,

 

{/*Stateํ™” ํ•œ ๋’ค ์ฝ”๋“œ*/}
<Subject
  title={this.state.subject.title}
  sub={this.state.subject.sub}
  onChangePage = {function () {
  alert('hihihi');
  }.bind(this)}
  >
</Subject>

 

 


Subject.js์— ์œ„์™€ ๊ฐ™์ด a Tag๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ, ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ, e.prevenDefulat()๋กœ ๋จผ์ € Reload๋ฅผ ๋ฐฉ์ง€ํ•ด์ฃผ๊ณ , App.js์— ์žˆ๋Š” onChagePage Event๋ฅผ ํ•จ์ˆ˜ ํ˜•์‹์œผ๋กœ ํ˜ธ์ถœํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

 

 

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด WEB์„ ํด๋ฆญํ–ˆ์„ ๋•Œ, ์„ค์ • ํ•ด์ค€๋Œ€๋กœ ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ๋Š” ๊ฒƒ์ด์—์š”.

 

 

<Subject
  title={this.state.subject.title}
  sub={this.state.subject.sub}
  onChangePage = {function () {
  this.setState({
  mode:'welcome'
  });
  }.bind(this)}
  >
</Subject>
๋ฐ˜์‘ํ˜•

 

App.js์—์„œ ์ด๋ฒˆ์—๋Š” setState()์— ๋ชจ๋“œ๊ฐ’์„ welcome์œผ๋กœ ์ฃผ๊ฒŒ ๋˜๋ฉด

 

 

์ฒ˜์Œ์—๋Š” ์œ„์™€ ๊ฐ™์ด ๋ณด์ด๋‹ค๊ฐ€ WEB์„ ํด๋ฆญํ•˜๊ฒŒ ๋˜์—ˆ์„ ๋•Œ

 

 

 

์œ„์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

๐Ÿ’ก์ฐธ๊ณ  : Number() ๋Š” ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ํ˜•๋ณ€ํ™˜ ํ•ด์ค€๋‹ค.

 

        while (i < data.length) {
            lists.push(
                <li key={data[i].id}>
                    <a href={"/content/" + data[i].id}
                       data-id = {data[i].id}
                       onClick={function (e) {
                         e.preventDefault();
                         this.props.onChangePage(e.target.dataset.id);
                       }.bind(this, data[i].id)}
                        >{data[i].title}
                    </a>
                </li>
            );
            i = i + 1;
        }

 

 

์œ„์™€ ๊ฐ™์ด Nav.js์—์„œ bind ํ•จ์ˆ˜์— data[i].id๋ฅผ ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ๊ฒŒ ๋˜๋ฉด onClick์˜ function ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ˜„์žฌ๋Š” e๊ฐ€ ์žˆ์œผ๋‚˜, ์ด๊ฒŒ ๋’ค๋กœ ํ•œ ์นธ ๋ฐ€๋ฆฌ๊ณ , bind์—์„œ ์ค€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ฒซ๋ฒˆ์งธ๋กœ ์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

props์™€ state๋Š” ๋ชจ๋‘ render()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์‚ฌ์šฉ์ž์˜ props๋กœ ์ปดํฌ๋„ŒํŠธ ๋‚ด์— ์žˆ๋Š” State๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์ง€์š”. ์ด ์ƒํƒœ๊ฐ€ ์‹ค์ œ ์›น ๋ธŒ๋ผ์šฐ์ € HTML ๋‹ค๋ฅธ ๋ง๋กœ DOM์ด๋ผ๋Š” ๊ฒƒ์— ์˜ํ–ฅ์„ ์ค˜์„œ ๋ณด์—ฌ์ง„๋‹ต๋‹ˆ๋‹ค!

์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” Props๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌํ•˜์ง€๋งŒ, ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•  ๋•Œ๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”. (Props๋Š” Read Only์ด๊ธฐ ๋•Œ๋ฌธ)

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•