рони,
1. В Vue 3 по другому инициация происходит.
2. Чтоб работала компиляция шаблонов на лету надо таки vue.global.min.js, runtime - это если шаблоны уже скомилены, моя вина.
3. $set в Vue 3, как я говорил, не нужен, потому его там и нет.
Да и вообще Vue 3 - это больше React 2.0 Remasterd. =\
Но совместимость кой-какая сохранена:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.item {
border: 1px solid #008000;
margin: 4px;
}
.active {
border: 1px solid red;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.min.js" ></script>
</head>
<body>
<div id="app">
<div v-for="{id} in itemsData" :class="[{ active: itemsFlag[id] },'item']">
<button @click="itemsFlag[id] = !itemsFlag[id]">Клик</button>
</div>
</div>
<script>
const app = Vue.createApp({
data() {
return {
itemsData: [{
id: "a"
}, {
id: "b"
}, {
id: "c"
}],
itemsFlag : {}
}
}
});
app.mount("#app")
</script>
</body>
</html>
Правда никто её не использует в либах второго порядка, увы, так что бестолку, все перешли на реакто-подобную мерзость.