ワラベンチャー
コーディング・スタイルの部だぜ!
スタイルの書き方を決めておこうぜの章だぜ!
使っているのは Vue3 と Vuetify3。
例えば、青い長方形を描くとき:
📄 example.vue :
<template>
<div
style="
width: 100px;
height: 200px;
background-color: blue;
">
</div>
</template>
👆 上記のように書くことができる。これがインライン・スタイル。
インラインは本当は1行に書くことだが、細かいことは気にしない。
以下のようにも書ける:
📄 example.vue :
<template> <div class="blue-rectangle-1"> </div> </template> <style scoped> div.blue-rectangle-1 { /* 青い長方形1 */ width: 200px; height: 100px; background-color: blue; } </style>
👆 グッド。これはスタイルシートを使った書き方。
スタイルシートの中では、TypeScript の変数を使うこともできるとされている。しかし:
📄 example.vue :
<template> <div class="blue-rectangle-2"> </div> </template> <script setup lang="ts"> const apple: number = 250; </script> <style scoped> div.blue-rectangle-2 { /* 青い長方形2 */ width: v-bind(apple)px; height: 100px; background-color: blue; } </style>
👆 今はバッド。その設定が無視されることがある。手元の環境で動作が確実になるまで、使わない方針。
スタイルの中で TypeScript の変数を使いたくなったときは:
📄 example.vue :
<template>
<div
:style="`
width: ${apple}px;
height: 100px;
background-color: blue;
`">
</div>
</template>
👆 インライン・スタイルで書くことができる。
しかし、HTMLを書くところにコードが増えていくと読みづらくなる。
以下のようにも書ける:
📄 example.vue :
<template> <div :style="getRectangle4()"> </div> </template> <script setup lang="ts"> function getRectangle4() : any { return { width: `${apple}px`, height: "100px", backgroundColor: "blue", } } </script>
👆 インラインに関数を書くことができる。
欠点としては、あとで apple の値を変更してもスタイルに反映(リアクティブ)してくれないことだ。
リアクティブさせるには、以下のようにも書ける:
📄 example.vue :
<template> <div :style="getRectangle5"> </div> </template> <script setup lang="ts"> import { computed } from "vue"; const getRectangle5 = computed< any >(() => { return { width: `${apple}px`, height: "100px", backgroundColor: "blue", }; }); </script>
👆 グッド。この書き方でリアクティブが利く。
戻り値の型と、(関数ではなく)ラムダ式を使っているので、いきなり複雑に見えるが、この形をそっくり真似するだけでもいける。
リアクティブを利かせながら、引数を渡すこともできる:
📄 example.vue :
<template> <div :style="getRectangle6(100)"> </div> </template> <script setup lang="ts"> import { computed } from "vue"; const getRectangle6 = computed< (banana: number) => any >(() => { return (banana: number)=>{ return { width: `${apple}px`, height: `${banana}px`, backgroundColor: "blue", } }; }); </script>
👆 グッド。[[[スタイル]を返すラムダ式]を返すラムダ式]を書いているので、複雑だが、この形をそっくり真似するだけでもいける。
ソースコード
ソースコードはこちら(^▽^)!