Vue: "์ „ํ™˜"๋ฐ "์—ฐ๊ฒฐ ์œ ์ง€"๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

์— ๋งŒ๋“  2019๋…„ 04์›” 07์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vuejs/vue

๋ฒ„์ „

2.6.10

๋ณต์ œ ๋งํฌ

https://codepen.io/aaronbird/pen/JVRKwa

์žฌํ˜„ ๋‹จ๊ณ„

๋ฐ๋ชจ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

<!DOCTYPE html>
<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>demo</title>
    <style>
      .link {
        cursor: pointer;
        user-select: none;
      }
    </style>
  </head>
  <body>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>

    <div id="app">
      <transition>
        <keep-alive include="foo">
          <component :is="target" @change="onChange"></component>
        </keep-alive>
      </transition>
    </div>
    <script>
      const Foo = {
        name: "foo",
        template: `<div class="link" @click="$emit('change', 'bar')">Go to Bar</div>`
      };
      const Bar = {
        name: "bar",
        template: `<div class="link" @click="$emit('change', 'foo')">Go to Foo</div>`
      };
      Vue.component("foo", Foo);
      Vue.component("bar", Bar);
      const app = new Vue({
        data: {
          target: "foo"
        },
        methods: {
          onChange(target) {
            this.target = target;
          }
        }
      }).$mount("#app");
    </script>
  </body>
</html>

๋””๋ฒ„๊น… ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
1 "์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘"๋ฐ "ํž™ ์Šค๋ƒ… ์ƒท ์ƒ์„ฑ"(์Šค๋ƒ… ์ƒท 1)์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
2 ์™ผ์ชฝ์˜ ๋ผ์šฐํŒ… ๋ฒ„ํŠผ์„ 10 ๋ฒˆ ํด๋ฆญ ํ•œ ๋‹ค์Œ "์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘"๋ฐ "ํž™ ์Šค๋ƒ… ์ƒท ๊ฐ€์ ธ ์˜ค๊ธฐ"(์Šค๋ƒ… ์ƒท 2)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
3 ์™ผ์ชฝ์˜ ๋ผ์šฐํŒ… ๋ฒ„ํŠผ์„ 10 ๋ฒˆ ํด๋ฆญ ํ•œ ๋‹ค์Œ "์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘"๋ฐ "ํž™ ์Šค๋ƒ… ์ƒท ๊ฐ€์ ธ ์˜ค๊ธฐ"(์Šค๋ƒ… ์ƒท 3)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ ๋œ "์Šค๋ƒ… ์ƒท"์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์Šค๋ƒ… ์ƒท 1 :

์Šค๋ƒ… ์ƒท 2 :

์Šค๋ƒ… ์ƒท 3 :

100 ๋ฒˆ ํด๋ฆญ ํ•œ ํ›„ :

VueComponent๊ฐ€ ์žฌํ™œ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ์ž…๋‹ˆ๊นŒ?

๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๊นŒ?

์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ๋ฒ„๊ทธ์ž…๋‹ˆ๊นŒ?

์‹ค์ œ๋กœ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ „ํ™˜ ํ•  ๋•Œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ง€์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

bug has PR

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. PR์ด ์žˆ์ง€๋งŒ ์ฃฝ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  5 ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ณผ ๊ฒƒ์ด๋‹ค.

๋ถ€๋ชจ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์บ์‹œ ๋œ vnode์˜ ๋ถ€๋ชจ์— ์˜ํ•ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žฌํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/bootstrap-vue/bootstrap-vue/issues/4214 ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

jsfiddle์„ ๋งŒ๋“ค๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์บ์‹ฑ ๋™์ž‘์„ ๋ณต์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ด ์š”, ์†Œ์‹ ์žˆ์–ด์š”? ์ด ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฏธ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. PR์ด ์žˆ์ง€๋งŒ ์ฃฝ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰