ããã«ã¡ã¯ãã§ãïŒ
ä»åã¯ãVueã®åºæ¬çãªäœ¿ãæ¹ããµã³ãã«ã³ãŒããå®éã«åãããªãã解説ããŠãããããšæããŸãã
ãã®èšäºäžã§ãµã³ãã«ã³ãŒããå®éã«åããããã«ããã¡ãã®èšäºã«ãŠäœæããSandpackã®ã©ãããŒã³ã³ããŒãã³ãã䜿çšããŠããŸãã
ð ïž ä»åã®ãŽãŒã«
- Vue ã®ããŒã¿ãã€ã³ãã£ã³ã°ãçè§£ãã
- Vue ã®ç®åºããããã£ã»ç£èŠããããã£ãçè§£ãã
- Vue ã®ã©ã€ããµã€ã¯ã«ããã¯ãçè§£ãã
宣èšçã¬ã³ããªã³ã°
Vue.js ã®æå€§ã®ç¹é·ã®äžã€ã 宣èšçã¬ã³ããªã³ã° ã§ãã
åŸæ¥ã® JavaScriptïŒVanilla JS ã jQueryïŒã§ã¯ããDOM ãååŸããŠçŽæ¥æåãæžãæããããšããæç¶ãçãªåŠçãå¿ èŠã§ããã察ã㊠Vue.js ã§ã¯ããããŒã¿ïŒç¶æ ïŒãã©ãããã¹ããããå®çŸ©ããã ãã§ãããŒã¿ã倿Žããããš Vue ãèªåçã« DOM ãæ€ç¥ã»åæç»ããŸãã
ãã®ä»çµã¿ã«ãããéçºè ã¯è€é㪠DOM æäœããè§£æŸãããã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯æ§ç¯ã«éäžã§ããŸãã
ããŒã¿ãã€ã³ãã£ã³ã°
JavaScript åŽã®ããŒã¿ãš HTML ç»é¢ã衚瀺ã»åæãããä»çµã¿ã ããŒã¿ãã€ã³ãã£ã³ã° ãšåŒã³ãŸãã
ããŒã¿ãã€ã³ãã£ã³ã°ã«ã¯ãäž»ã«ä»¥äžã®çš®é¡ããããŸãã
| çš®é¡ | çšé |
|---|---|
ãã¹ã¿ãã·ã¥æ§æ ( {{ }} ) | ããŒã¿ãããã¹ããšããŠç»é¢ã«åã蟌ãéã«äœ¿çš |
屿§ãã€ã³ãã£ã³ã° ( v-bind: ãŸã㯠: ) | HTML屿§ã«åçãªå€ãæå®ããéã«äœ¿çš |
åæ¹åãã€ã³ãã£ã³ã° ( v-model ) | ãã©ãŒã (input, select, checkbox ãªã©) ã®å ¥åå€ãšããŒã¿ããªã¢ã«ã¿ã€ã ã«åæãããéã«äœ¿çš |
ãµã³ãã«ã³ãŒã
ref()ã«ãããªã¢ã¯ãã£ã倿°ã®å®çŸ©
<script setup>å ã§ ref() ã䜿ã£ãŠå®çŸ©ããå€ã¯ããªã¢ã¯ãã£ããªç¶æ ããšãªããå€ãæžãæãããšãã³ãã¬ãŒãåŽãå³åº§ã«åæç»ãããŸãã- ã¯ã©ã¹ã®åçãã€ã³ãã£ã³ã° (
:class)
selectOptions ãªããžã§ã¯ãã :class ã«æž¡ããŠããŸããããŒåã CSS ã¯ã©ã¹åãå€ã® booleanïŒtrue / falseïŒãé©çšç¶æ ã衚ãããããã§ãã¯ããã¯ã¹æäœã§ç»é¢äžã®èŠãç®ãåçã«åãæ¿ãããŸãã v-modelã«ããåæ¹åéä¿¡
input ã¿ã°ã«v-model="text"ãæå®ããããšã§ãå ¥åããæåãå³åº§ã« text 倿°ãžåæ ãããåæã«ãã¹ã¿ãã·ã¥{{ text }}ã®è¡šç€ºãæŽæ°ãããŸãã
ãããv-model ã§ã¯ãªããv-bind:value="text"ãšèšè¿°ãããšãå€ã¯è¡šç€ºãããŸãããå ¥åå€ã âtextâãªããžã§ã¯ãã«ã¯åæ ãããããã¹ã¿ãã·ã¥ã§ã®è¡šç€ºã¯æŽæ°ãããŸãããv-bindã«ãã屿§ã®äžæ¬é©çšv-bind="attrs"ã®ããã«ãªããžã§ã¯ããåŒæ°ãªãã® v-bind ã«æž¡ããšãtype, value, readonly ãªã©ã®è€æ°å±æ§ãäžæ¬ã§èŠçŽ ã«ã»ããã§ããŸãã
åæ¹åãã€ã³ãã£ã³ã°ã«ã€ããŠ
åæ¹åãã€ã³ãã£ã³ã°ã¯ããã€ã³ã察象ã«å¿ããŠå éšçã«æ¬¡ã®èšè¿°ã«å±éãããŸãã
-
HTMLèŠçŽ ãšã®ãã€ã³ã (v-model=ârefObjâ)
HTMLèŠçŽ ãã€ã³ã察象ã®å±æ§ ãã€ã³ã察象ã®ã€ãã³ããã³ãã© <input type="text"><textarea>:value=ârefObjâ @input=ârefObj = $event.target.valueâ <input type="checkbox">:checked=ârefObjâ @change=ârefObj = $event.target.checkedâ <input type="radio">:value=ârefObjâ @change=ârefObj = $event.target.valueâ <select>:value=ârefObjâ @change=ârefObj = $event.target.valueâ -
ã³ã³ããŒãã³ããšã®ãã€ã³ã
-
åäžå±æ§ãšã®ãã€ã³ã (v-model=ârefObjâ)
ãã€ã³ã察象ã®å±æ§ ãã€ã³ã察象ã®ã€ãã³ããã³ãã© è£è¶³ :modelValue=ârefObjâ @update:modelValue=ârefObj = $eventâ ãã€ã³ã察象ãåäžã®å Žåã¯ããã©ã«ãã®å±æ§åãšã㊠modelValueã䜿çšãããã -
è€æ°å±æ§ãšã®ãã€ã³ã (v-model:xxx=ârefObjâ)
ãã€ã³ã察象ã®å±æ§ ãã€ã³ã察象ã®ã€ãã³ããã³ãã© è£è¶³ :xxx=ârefObjâ @update:xxx=ârefObj = $eventâ xxxã¯ãã€ã³ã察象ã®å±æ§åãè€æ°ãã€ã³ãã£ã³ã°æã¯èå¥ã®ããã«ååã®æç€ºãå¿ é ã
-
ç®åºãããã㣠(computed) ãš ç£èŠãããã㣠(watch)
Vue ã«ã¯ãç¶æ
ã®å€åã«å¿ããŠèªåçã«åŠçãè¡ãæ©èœãšã㊠computed ãš watch ãçšæãããŠããŸãã
-
computedïŒç®åºããããã£ïŒ
æ¢åã®ãªã¢ã¯ãã£ãããŒã¿ãããå¥ã®å€ãèšç®ããŠå°ãåºããããã«äœ¿çšããŸããäŸåããŠããããŒã¿ã倿Žããããšãã®ã¿åèšç®ãããçµæããã£ãã·ã¥ãããããéåžžã«å¹ççã§ãã -
watchïŒç£èŠããããã£ïŒ
ç¹å®ã®å€ã®å€åããã£ããã«ãå¯äœçšïŒãã°åºåãAPI éä¿¡ãã¡ãã»ãŒãžè¡šç€ºãªã©ïŒãå®è¡ãããããã«äœ¿çšããŸãã
ãµã³ãã«ã³ãŒã
-
computedã«ããèªåèšç®
priceïŒå䟡ïŒã quantityïŒæ°éïŒã倿Žãããšãããã«äŸåããŠãã subtotalïŒå°èšïŒâ shippingFeeïŒéæïŒâ totalPriceïŒç·åèšïŒãèªåçã«é£éããŠåèšç®ãããŸãã -
watchã«ããå€åã®æ€ç¥
watch(shippingFee, âŠ) ã§éæã®å€åãç£èŠããŠããŸããå°èšã 10,000 åãè¶ ããŠéæã 500 ãã 0 ã«å€ãã£ãç¬éãæããããŒã¹ãã¡ãã»ãŒãžïŒmessageïŒãåºåãããå¯äœçšããå®è¡ããŠããŸãã
v-model 修食åpriceïŒå䟡ïŒãš quantityïŒæ°éïŒã v-model.number 修食åã§ãã€ã³ãããŠããŸããããã«ããå
¥åå€ãæ°å€ãšããŠæ±ã£ãŠããŸãã
ã»ãã«ããv-model.lazy 修食åã v-model.trim 修食åããããŸãã
v-model.lazy.trim ã v-model.trim.number ã®ããã«ã䜵çšããããšãå¯èœã§ãã
v-model.lazy修食åãã€ãããšãããã¹ãã®å ¥åã @input ã§ã¯ãªã @change ã®ã¿ã€ãã³ã°ïŒå ¥åãç¢ºå®æïŒã§ããŒã¿ãåæãããããšãã§ããŸããv-model.trim修食åã«ã€ããŠã¯ãå ¥åããã¹ãã®ååŸã®ç©ºçœãåãé€ãããšãã§ããŸãã
ã©ã€ããµã€ã¯ã«ããã¯
Vue ã³ã³ããŒãã³ãã¯ãäœæãããŠãã DOM ã«è¿œå ïŒããŠã³ãïŒãããããŒã¿æŽæ°ã«ãã£ãŠåæç»ãããæçµçã«ç Žæ£ïŒã¢ã³ããŠã³ãïŒããããŸã§ã®äžé£ã®çååšæïŒã©ã€ããµã€ã¯ã«ïŒãæã£ãŠããŸãã
ãã®ç¹å®ã®ã¿ã€ãã³ã°ããšã«ç¹å®ã®åŠçãå·®ã蟌ããä»çµã¿ã ã©ã€ããµã€ã¯ã«ãã㯠ãšåŒã³ãŸãã
以äžã®ãµã³ãã«ã§ã¯ãã©ã®ã¿ã€ãã³ã°ã§ã©ã®ããã¯ãçºç«ããããå¯èŠåããããã«ãåã³ã³ããŒãã³ãã®ããã¯å®è¡ã¿ã€ãã³ã°ã§èŠªãžãã°ãéä¿¡ïŒemitïŒããç»é¢äžã«æç»ãããŠããŸãã
ãªããã³ã³ããŒãã³ãã«é¢ããŠã¯ã次åã«æ¹ããŠè§£èª¬ããŸãã
ãµã³ãã«ã³ãŒã
-
åå衚瀺ïŒããŠã³ãæïŒ
onBeforeMountâonMountedã®é ã§çºç«ããŸããåæã® API ããŒã¿ååŸãªã©ã¯äž»ã«onMountedã§è¡ããŸãã -
ããŒã¿å€æŽæïŒæŽæ°æïŒ
ã+1ããã¿ã³ãæŒã㊠count ã倿ŽãããšãonBeforeUpdateâonUpdatedã®é ã§çºç«ããŸãã -
ã³ã³ããŒãã³ãã®ç Žæ£ïŒéåžžæïŒ
ãKeepAlive ãæå¹ã«ãããã®ãã§ãã¯ãå€ããç¶æ ã§é衚瀺ã«åãæ¿ãããšãonBeforeUnmountâonUnmountedãé ã«åŒã³åºãããDOM ããå®å šã«æ¶å»ãããŸãã -
<KeepAlive>ã«ããç¶æ ãã£ãã·ã¥æ
ãKeepAlive ãæå¹ã«ãããããªã³ã«ããŠé衚瀺ã«ãããšãã³ã³ããŒãã³ãã¯ç Žæ£ãããéæŽ»æ§åãããŸãããã®ãšãonUnmountedã§ã¯ãªãonDeactivatedãçºç«ããå衚瀺æã«ã¯onActivatedãåŒã³åºãããŠååã® count ã®ç¶æ ãä¿æãããŸãã -
äž»ãªã©ã€ããµã€ã¯ã«ããã¯ã®äžèЧ
ã©ã€ããµã€ã¯ã«ããã¯ çš®é¡ ã¿ã€ãã³ã° äž»ãªçšé onBeforeMount ããŠã³ã DOM ãžè¿œå ãããçŽå DOM 远å åã®æçµæºå onMounted ããŠã³ã DOM ã«è¿œå ãããçŽåŸ API ããã®åæããŒã¿ååŸãDOM èŠçŽ ãžã®çŽæ¥ã¢ã¯ã»ã¹ onBeforeUpdate ããŒã¿æŽæ° ãªã¢ã¯ãã£ãããŒã¿ã倿ŽãããDOM åæç»ã«å ¥ãçŽå æç»åã®æåæäœã»ç¶æ ã®ååŸ onUpdated ããŒã¿æŽæ° ããŒã¿å€æŽã«äŒŽã DOM ã®åæç»ãå®äºããçŽåŸ æŽæ°åŸã® DOM ç¶æ ã«å¿ããåŠç onBeforeUnmount ã¢ã³ããŠã³ã ç Žæ£ïŒæ¶å»ïŒãããçŽå ã¿ã€ããŒè§£é€ã»ã€ãã³ããªã¹ããŒã®åé€ïŒã¯ãªãŒã³ã¢ããïŒ onUnmounted ã¢ã³ããŠã³ã å®å šã«ç Žæ£ãããçŽåŸ ç Žæ£å®äºåŸã®åŠç onActivated KeepAlive <KeepAlive>å ã§é掻æ§ã ã£ãã³ã³ããŒãã³ããå衚瀺ãããæãã£ãã·ã¥ããã®åŸ©åž°æåŠç onDeactivated KeepAlive <KeepAlive>å ã®ã³ã³ããŒãã³ããé衚瀺ïŒãã£ãã·ã¥ç¶æ ïŒã«ãªã£ãæé衚瀺åæã®ã¯ãªãŒã³ã¢ãã onErrorCaptured ãšã©ãŒææ åŒã³åºããŠããåã³ã³ããŒãã³ãçã§ãšã©ãŒãçºçããæ ãšã©ãŒã®èŠªåŽã§ã®ãã£ããã»ã¢ããªåŽ©å£ã®é²æ¢ onRenderTracked ãããã°çš ã¬ã³ããªã³ã°äžã«ãªã¢ã¯ãã£ãäŸåé¢ä¿ã远跡ãããæ ããã©ãŒãã³ã¹èšæž¬ã»äŸåé¢ä¿ã®ãããã°ïŒéçºç°å¢éå®ïŒ onRenderTriggered ãããã°çš ãªã¢ã¯ãã£ãããŒã¿ã®å€æŽã«ããåæç»ãããªã¬ãŒãããæ ãã©ã®å€æ°ãåå ã§åæç»ãèµ·ããããã®ç¹å®ïŒéçºç°å¢éå®ïŒ