Vue

props์œผ๋กœ ํ•จ์ˆ˜ ๋ฐ›๊ธฐ

frontChoi 2023. 7. 23. 12:44
๋ฐ˜์‘ํ˜•

๐Ÿฆž props ์œผ๋กœ ํ•จ์ˆ˜ ๋ฐ›๊ธฐ ๊ธ€์„ ์“ฐ๊ฒŒ ๋œ ์ด์œ 

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ชจ๋‹ฌ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋‹ฌ์€ "์˜ˆ,์•„๋‹ˆ์˜ค" ๋˜๋Š” ๊ฒฝ๊ณ ์„ฑ  ๋ชจ๋‹ฌ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ํ™”๋ฉด์— 3~4๊ฐœ์˜ ๋ชจ๋‹ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ํ•œ ํ™”๋ฉด์— 3~4๊ฐœ์˜ ๋ชจ๋‹ฌ์„ importํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์ด ์ž์›๋‚ญ๋น„๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ ๋งŒ์•ฝ ๋ชจ๋‹ฌ์˜ ๊ตฌ์กฐ๋Š” ๊ฐ™์œผ๋‚˜, ์„ ํƒ๋œ ๋ฒ„ํŠผ์˜ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋™์ž‘ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค๋ฉด props์œผ๋กœ Function์œผ๋กœ ๋ฐ›์œผ๋ฉด ๋˜์ง€ ์•Š๋Š”๊ฐ€ ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์ด๋ฒˆ๊ธ€์„ ์ ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์•„๋ž˜ ๋ชจ๋‹ฌ1,๋ชจ๋‹ฌ2๋Š” ๊ตฌ์กฐ๋Š” ๊ฐ™์œผ๋‚˜ 

 

๐ŸฆŽ Props์œผ๋กœ ํ•จ์ˆ˜ ๋ฐ›๊ธฐ

์ผ๋‹จ props์œผ๋กœ closefunc์œผ๋กœ ๋ฐ›๋„๋ก ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  type์„ Function์œผ๋กœ ์„ ์–ธํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ 'Default function'์œผ๋กœ ๋ฐ›๋„๋ก ํ•œ๋‹ค.

 

props: {
	closefunc: {
      type: Function,
      default() {
        return 'Default function'
      }
    }
}

๐Ÿ  ๋ถ€๋ชจ์ปดํผ๋„ŒํŠธ์—์„œ props์œผ๋กœ ๋ฐ›์„ data ์„ ์–ธ

์ผ๋‹จ ์ž์‹์ปดํผ๋„ŒํŠธ์— ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์–ธํ•ด์ค€๋‹ค.

title,contents,modalCallback์„ ์„ ์–ธํ•ด์ค€๋‹ค. modalCallback์ด ์ž์‹ ์ปดํผ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ํ•จ์ˆ˜์ด๋‹ค.

data() {
	modalData: {
        title: "",
        contents: "",
        modalCallback: () => {
          console.log("default modalCallback");
        },
      }
}

๐Ÿฆง ์„ ํƒ๋œ ๋ฒ„ํŠผ์— ๋”ฐ๋ผ modalData ๊ฐ’ ๋ฐ”๊ฟ”์ฃผ๊ธฐ

onCloseModal1,onCloseModal2๋Š” ๊ฐ™์€ ๋ชจ๋‹ฌ์„ ๊ณต์œ ํ•˜๋ฉด์„œ , ๋ฒ„ํŠผ ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅธ ํ•จ์ˆ˜์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  modalClick1,modalClick2๋Š” ๋ชจ๋‹ฌ1,2์˜ ํด๋ฆญํ–ˆ์„ ๋•Œ์˜ ํ•จ์ˆ˜์ด๋ฉฐ, modalCallBack์— onCloseModal1,onCloseModal2๋ฅผ ์ „๋‹ฌ ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

methods: {
 	onCloseModal1() {
      alert("onClose1")
    },
    onCloseModal2() {
      alert("onClose2")
    },
	modalClick1() {
      this.modalData = {
        title: "์ œ๋ชฉ1",
        contents: "๋ณธ๋ฌธ๋‚ด์šฉ",
        modalCallback: this.onCloseModal1
      }
	  //๋ชจ๋‹ฌ๋ณด์—ฌ์ฃผ๊ธฐ data
      this.modalVisible = true;
    },
    modalClick2() {
      this.modalData = {
        title: "์ œ๋ชฉ2",
        contents: "๋ณธ๋ฌธ๋‚ด์šฉ2",
        modalCallback: this.onCloseModal2
      }
      //๋ชจ๋‹ฌ๋ณด์—ฌ์ฃผ๊ธฐ data
      this.modalVisible = true;
    }
}

 

๐Ÿƒ  ๋ถ€๋ชจ์—์„œ ๋ฐ›์€ ํ•จ์ˆ˜ ํ˜ธ์ถœํ•ด์ฃผ๊ธฐ

๋ถ€๋ชจ์ปดํผ๋„ŒํŠธ์—์„œ ๋ฐ›์€ closefunc๋ฅผ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค.

props: {
closefunc: {
      type: Function,
      default() {
        return 'Default function'
      }
    }
},
methods: {
    close() {
      this.$emit("onclose");
      this.closefunc();
    }
  },

๊ฐ๊ฐ closefunc์— ์ „๋‹ฌํ•œ ํ•จ์ˆ˜๋“ค์ด ๋œจ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•