JSFiddle - React, Tailwind, and code Playground
by kurotanshi
HTML
<script src="https://unpkg.com/vue@next"></script>
<div id="app">
<ul class="nav nav-tabs">
<li class="nav-item"
@click.prevent="currentView = 'home-component'"
:class="{'active': currentView === 'home-component' }">
<a href class="nav-link">Home</a>
</li>
<li class="nav-item"
@click.prevent="currentView = 'list-component'"
:class="{'active': currentView === 'list-component' }">
<a href class="nav-link">List</a>
</li>
<li class="nav-item"
@click.prevent="currentView = 'about-component'"
:class="{'active': currentView === 'about-component' }">
<a href class="nav-link">About</a>
</li>
</ul>
<div class="app-body">
<home-component
text="This is Home-Component"
v-if="currentView === 'home-component'"></home-component>
<list-component
text="This is List-Component"
v-if="currentView === 'list-component'"></list-component>
<about-component
text="This is About-Component"
v-if="currentView === 'about-component'"></about-component>
</div>
</div>
SCSS
#app {
display: block;
padding: 1rem;
padding-top: 2rem;
font-size: 1rem;
}
.nav-tabs {
display: block;
overflow: hidden;
margin-bottom: 1.5rem;
padding: 0;
border-bottom: 1px solid #ddd;
.nav-link{
display: block;
&:hover {
text-decoration: none;
border-bottom: none;
}
}
}
li {
float: left;
display: block;
margin-right: 1rem;
margin-bottom: -1px;
padding: 4px 0.8rem;
border: 1px solid #ddd;
list-style: none;
&:hover, &.active {
background-color: #ddd;
}
}
a {
text-decoration: none;
}
input {
width: 90%;
padding: 3px;
font-size: 1rem;
}
JavaScript
const child = {
template: `<input v-model="msg">`,
props: {
text: String
},
data() {
return {
msg: this.text
}
}
};
const app = Vue.createApp({
components: {
"home-component": {...child},
"list-component": {...child},
"about-component": {...child},
},
data () {
return {
// 預設值為 'home-component'
currentView: 'home-component'
};
}
});
app.mount('#app');