useEffect } from 'react'; export default function Counter() { const [count, setCount] = useState(0); function increment() { setCount((c) => c + 1); } const doubledCount = count * 2; return ( <button onClick={increment}> Count is: {count} </button> ); } <script setup> import { ref, computed } from 'vue' const count = ref(0) function increment() { count.value++ } const doubledCount = computed(() => count.value * 2) </script> <template> <button @click="increment"> Count is: {{ count }} </button> </template> React は state が更新されるたびにコンポーネント関数全体が再レンダーされ、 トップレベルに書かれた計算も再実行される Vue の setup は最初のレンダー時に一度だけ実行される ref が更新されると、 依存関係のある computed 関数だけが個別に再計算される