TIL56.tabs menu(React, Vue)
コメントとビューを使用して、Webサイトでよく使用される「tabs menu」を作成します.
Tabs menu with React
コード#コード#
export default class MenuTab extends Component {
constructor() {
super();
this.state = {
activeId: 1,
};
}
goToPage = (id) => {
this.setState({activeId: id})
};
render() {
return (
<div className="wrapper">
<ul className="tabs">
<li onClick={() => this.goToPage(1)}>제주도</li>
<li onClick={() => this.goToPage(2)}>서울</li>
<li onClick={() => this.goToPage(3)}>부산</li>
</ul>
<div className="contents">
{this.state.activeId === 1 && <First />}
{this.state.activeId === 2 && <Second />}
{this.state.activeId === 3 && <Third />}
</div>
</div>
);
}
}
リファクタリングコード
//상수이기 때문에 클래스 밖에서 변수 선언 + 대문자로 작성
const MAPPING_OBJ = {
1: <First />,
2: <Second />,
3: <Third />,
};
//객체로 맵핑
const MAPPING_ARRAY = ["제주도", "서울", "부산"];
export default class MenuTab extends Component {
constructor() {
super();
this.state = {
activeId: 1,
};
}
goToPage = (id) => {
this.setState({ activeId: id });
};
render() {
return (
<div className="wrapper">
<ul className="tabs">
{MAPPING_ARRAY.map((region, idx) => (
<li onClick={() => this.goToPage(idx + 1)}>{region}</li>
))}
</ul>
<div className="contents">{MAPPING_OBJ[this.state.activeId]}</div>
</div>
);
}
}
Tabs menu with Vue
コード#コード#
<template>
<div class="registerWrapper">
<div>
<ul class="tabs">
<li
:class="activeId === 1 ? 'activeTab' : ''"
@click="clickTab(1)"
>
로그인
</li>
<li
:class="activeId === 2 ? 'activeTab' : ''"
@click="clickTab(2)"
>
회원가입
</li>
</ul>
<div class="content" v-if="activeId === 1">
<Login />
</div>
<div class="content" v-else>
<Signup />
</div>
</div>
</div>
</template>
<script>
import Login from "./components/Login";
import Signup from "./components/Signup";
export default {
components: { Login, Signup },
data() {
return {
activeId: 1
};
},
methods: {
clickTab(id) {
this.activeId = id;
},
}
};
</script>
Reference
この問題について(TIL56.tabs menu(React, Vue)), 我々は、より多くの情報をここで見つけました https://velog.io/@jo_love/TIL55.tabs-menuReact-Vueテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol