menu tabの実装
MenuTabの実装
Webでよく見られるTabを実現しましょう.
🌈完全なコード
ここで繰り返すコードを減らす
重複するコード作成の代わりに
ここでは、従来のデフォルト1,2,3ではなくキー値idxを与える必要があります(stateが1に設定されているため)また、classNameを与える理由も違います.1,2,3が違うからです.
変数に指定したcategoryを設定します!
Webでよく見られるTabを実現しましょう.
🌈完全なコード
export default class MenuTab extends Component {
state = {
currentId: 1,
};
clickHandler = (id) => {
this.setState({ currentId: id });
};
render() {
return (
<div className="wrapper">
<ul className="tabs">
{
<li onClick={() => this.clickHandler(1)}>First</li>
<li onClick={() => this.clickHandler(2)}>Second</li>
<li onClick={() => this.clickHandler(3)}>Third</li>
{/* ==> map함수로 변경 */}
{CATEGORY_ARR.map((category, idx) => {
return (
<li key={category} onClick={() => this.clickHandler(idx + 1)}>
{category}
</li>
);
})}
</ul>
<div className="contents">{MAPPING_OBJ[this.state.currentId]}</div>
</div>
);
}
}
//변하는 값이 아니기 때문에 클래스 밖에서 변수 선언
const MAPPING_OBJ = {
1: <First />,
2: <Second />,
3: <Third />,
};
//조건문 대신 객체로 맵핑!
const CATEGORY_ARR = ["First, Second, Third"];
初期状態値currentId:1state = {
currentId: 1,
};
そしてtabクリック時の(onClick)関数をユーザに実行させる<li onlick={() => this.clickHandler(1)}> First</li>
click関数はパラメータとしてidを受信し、状態値を入力したパラメータ値に変換します.clickHandler = (id) => {
this.setState({ currentId: id });
};
currentId値を条件付きレンダリングし、id値に一致する構成部品を表示します.{this.state.currentId ===1 && <First />
{this.state.currentId ===2 && <Second />
{this.state.currentId ===3 && <Third />
🌈重複コードの削減ここで繰り返すコードを減らす
{this.state.currentId === 1 && First}
{this.state.currentId === 2 && Second}
{this.state.currentId === 3 && Third}
グローバル変数として、オブジェクトでKey:Value、Keyで数字、Valueで構成部品を使用できます.const MAPPING_OBJ = {
1: First,
2: Second,
3: Third,
};
次に[]配列にstateのcurrentId値を入力します.重複するコード作成の代わりに
{ MAPPING_OBJ [this.state.currentId]
ここで繰り返す関数の実行を減らす<li onlick={() => this.clickHandler(1)}> First </li>
<li onlick={() => this.clickHandler(2)}> Second </li>
<li onlick={() => this.clickHandler(3)}> Third </li>
グローバル変数として指定し、[]配列に置換Tab Stringを追加します.const CATEGORY_ARR = ["First", "Second", "Third"];
変数CATEGORY ARRはmapを返し、パラメータとしてcategoryとindexを入れます.ここでは、従来のデフォルト1,2,3ではなくキー値idxを与える必要があります(stateが1に設定されているため)また、classNameを与える理由も違います.1,2,3が違うからです.
変数に指定したcategoryを設定します!
{CATEGORY_ARR.map((category, idx) => {
return ( <li key={idx}
onClick={() => this.clickHandler(idx + 1)}
className={category} >
Reference
この問題について(menu tabの実装), 我々は、より多くの情報をここで見つけました https://velog.io/@duswn38/menu-tab-구현하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol