본문 바로가기

Vue/vue 기초 공부하기

Vue component, props를 활용한 끝말잇기 만들기

컴포넌트는 인스턴스보다는 위에!

스크립트는 div#root보다는 아래에!

 

컴포넌트는 data: {

} 이런방식으로 하는게 아닌 

data(){

return{

}

}

방식으로 함수를 만들어서 받아주어야 한다.

 

`` 백틱을 활용해서 template를 선언

 

props를 활용할때에는

선언은 kebab-case( -를 활용한 방식)

vue에서 사용할때는 자동으로 camelCase를 활용한다.

<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>구구단</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
  <div id="root">
    <!-- <div>끝말잇기</div>
    <br>
    <div>{{word}}</div>
    <form v-on:submit="onSubmitForm">
      <input type="text" v-model="value" ref="answer">
      <button type="submit">입력</button>
    </form>
    <div>{{result}}</div> -->
    <word-relay start-word="유상무"></word-relay>
    <word-relay start-word="초밥"></word-relay>
    <word-relay start-word="바보"></word-relay>
  </div>
  <script>
    //컴포넌트는 인스턴스보다는 위에!
    //스크립트는 div#root보다는 아래에!
    Vue.component("word-relay", {
      template:

        ` 
      <div>
        <div>끝말잇기</div>
        <br>
        <div>{{word}}</div>
        <form v-on:submit="onSubmitForm">
          <input type="text" v-model="value" ref="answer">
          <button type="submit">입력</button>
        </form>
        <div>{{result}}</div>
      </div>
      `,
      //컴포넌트에서는 데이터를 함수로 만들어줘야한다
      props: ['start-word'],
      data() {
        return {
          word: this.startWord,
          result: '',
          value: ''
        }
      },
      methods: {
        onSubmitForm(e) {
          e.preventDefault();
          if (this.word[this.word.length - 1] === this.value[0]) {
            this.result = '정답!';
            this.word = this.value;
          } else {
            this.result = '땡!!!!!!';
          }
          this.value = '';
          this.$refs.answer.focus();
        }
      }
    });
  </script>
  <script>
    const app = new Vue({
      el: '#root'
    });
  </script>

</body>

</html>

컴포넌트를 활용해서 만들었기 때문에 각각 데이터에 대한 간섭이 일어나지 않는다.

 

props를 활용했기때문에 기초로 주어지는 값이 다르다.