JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.js"></script>
<div id="app">
<countries-list :countries="countries"></countries-list>
</div>
<template id="countries">
<ul>
<li v-for="n in countries" class="country">
<div class="title">{{ n.country }}</div>
<regions-list :regions="n.regions"></regions-list>
</li>
</ul>
</template>
<template id="regions">
<ul>
<li v-for="n in regions" class="region">
<div class="title">{{ n.region }}</div>
<cities-list :cities="n.cities"></cities-list>
</li>
</ul>
</template>
<template id="cities">
<ul>
<li v-for="n in cities" class="city">
<div class="title">{{ n.city }}</div>
<div>{{ n.coord }}</div>
</li>
</ul>
</template>
CSS
.country {
margin: 10px;
padding: 10px;
border: 1px solid #000;
}
.region {
margin: 5px;
padding: 5px;
border: 1px solid #666;
}
.city {
margin: 5px;
padding: 5px;
border: 1px solid #ccc;
}
.title {
font-weight: bold;
}
JavaScript
Vue.component('countries-list', {
template: '#countries',
props: [ 'countries' ],
});
Vue.component('regions-list', {
template: '#regions',
props: [ 'regions' ],
});
Vue.component('cities-list', {
template: '#cities',
props: [ 'cities' ],
});
new Vue({
el: '#app',
data: {
countries: [
{
country: 'Россия',
regions: [
{
region: 'Московская область',
cities: [
{
city: 'Москва',
coord: [55.751244, 37.618423]
},
{
city: 'Балашиха',
coord: [37.9679867, 55.7981904]
},
]
}
]
},
{
country: 'США',
regions: [
{
region: 'Калифорния',
cities: [
{
city: 'Лос-Анджелес',
coord: [34.052235, -118.243683]
},
{
city: 'Сакраменто',
coord: [38.575764, -121.478851]
}
]
},
{
region: 'Теннесси',
cities: [
{
city: 'Нэшвилл',
coord: [36.174465, -86.767960]
}
]
}
]
}
]
}
});