React 및 Tailwind를 사용하여 측면 탐색 모음을 만드는 방법
20274 단어 nextjsreactjavascriptcss
개요
플랫폼에서 사이드바를 구현하는 데 사용할 수 있는 몇 가지 접근 방식이 있지만 이러한 각 접근 방식의 디자인은 페이지 레이아웃과 사이드바가 제공할 목적에 따라 크게 달라집니다.
분명히 사이드바는 사용자에게 애플리케이션에서 탐색을 제공하는 단 하나의 목적을 가지고 있습니다. 그러나 다음과 같은 몇 가지 원칙을 고려해야 합니다.
이것들은 내가 고려하는 몇 가지 요소이지만 어쨌든 this Material Design 페이지를 읽는 것이 좋습니다.
오늘의 예
오늘 우리는 단일 구성 요소를 만들 것입니다. 그것은 단지 사이드바일 것입니다. 이 동일한 구성 요소는 화면에서 너무 많은 공간을 차지하지 않도록 작은 너비를 가지지만 직관적이고 매우 간결해야 합니다.
제 말의 의미를 알 수 있도록 이 기사의 끝에서 다음과 같은 최종 결과를 얻으시기 바랍니다.
코딩하자
오늘 사용할 프레임워크는 Tailwind CSS이며 이 프레임워크와 함께 클래스 이름 및 반응 아이콘과 같은 다른 도구를 사용할 것입니다.
npm install classnames react-icons
그 후 우리는 우리가 가질 탐색 요소의 이름을 가진 파일을 만들 것입니다.
// @src/data/navigation.js
export default ["Home", "Gallery", "Store", "Favorites", "Saved"];
이제 사이드바 작업을 시작할 수 있습니다. 보다 구체적으로 스타일을 지정하는 데 사용된 스타일은 다음과 같습니다.
/* @src/components/Sidebar.module.css */
.wrapper {
@apply fixed left-0 top-0 bottom-0 z-50 w-14 bg-white flex flex-col h-screen justify-between items-center py-6 rounded-tr-4xl rounded-br-4xl;
}
.logo {
@apply text-4xl text-gray-800;
}
.navListItems {
@apply flex flex-col items-center w-full;
}
.navItem {
@apply text-gray-400 hover:text-gray-800 text-xl py-4 cursor-pointer;
}
.navItemActive {
@apply text-blue-600 hover:text-blue-700;
}
.tooltip {
@apply absolute w-auto min-w-max left-16 text-base font-medium hidden;
}
.bottomWrapper {
@apply flex flex-col justify-between items-center;
}
.notifications {
@apply w-10 h-10 bg-gray-100 hover:bg-gray-200 cursor-pointer rounded-xl flex items-center justify-center text-gray-800 text-lg relative mb-4;
}
.badge {
@apply h-5 w-5 flex justify-center items-center text-white absolute -top-1 -right-1 bg-red-500 text-xs rounded-full;
}
.settingsLogo {
@apply text-3xl text-gray-400 hover:text-gray-800 cursor-pointer;
}
컴포넌트는 이전에 정의된 탐색 데이터(경로)가 될 단 하나의 prop을 받습니다. 그런 다음 useState 후크를 사용하여 선택한 경로를 정의합니다(초기 경로는 홈이 됨). 다음으로 우리는 배열의 요소에 따라 표시된 아이콘을 반환하는 데 사용되는 switch 문이 있는 함수를 만들어야 합니다.
// @src/components/Sidebar.jsx
import React, { useState, useCallback } from "react";
import { IoLogoEdge, IoBookmark } from "react-icons/io5";
import {
BsImageFill,
BsFillHandbagFill,
BsFillStarFill,
BsHouseFill,
} from "react-icons/bs";
import { RiSettings4Fill } from "react-icons/ri";
import { FaRegBell } from "react-icons/fa";
import classNames from "classnames";
import styles from "./Sidebar.module.css";
const Sidebar = ({ navigationData }) => {
const [currentRoute, setCurrentRoute] = useState("Home");
const renderIcon = useCallback((element) => {
switch (element) {
case "Home":
return <BsHouseFill />;
case "Gallery":
return <BsImageFill />;
case "Store":
return <BsFillHandbagFill />;
case "Favorites":
return <BsFillStarFill />;
case "Saved":
return <IoBookmark />;
}
}, []);
return (
<nav className={styles.wrapper}>
<span className={styles.logo}>
<IoLogoEdge />
</span>
<ul className={styles.navListItems}>
{navigationData.map((element, index) => (
<li
key={index}
className={classNames([
styles.navItem,
currentRoute === element && styles.navItemActive,
"group",
])}
onClick={() => setCurrentRoute(element)}
>
{renderIcon(element)}
<span
className={classNames([styles.tooltip, "group-hover:inline"])}
>
{element}
</span>
</li>
))}
</ul>
<div className={styles.bottomWrapper}>
<div className={styles.notifications}>
<span className={styles.badge}>24</span>
<FaRegBell />
</div>
<span className={styles.settingsLogo}>
<RiSettings4Fill />
</span>
</div>
</nav>
);
};
export default Sidebar;
마지막으로 항목 파일(이 경우 App.jsx)로 이동해야 하며 다음과 같은 스타일을 갖게 됩니다.
/* @src/App.module.css */
.container {
@apply bg-gray-200;
}
.devLogo {
@apply flex items-center justify-center text-5xl text-gray-300 h-screen;
}
이제 App.jsx에서 탐색 데이터와 생성한 사이드바 구성 요소를 가져온 다음 표시된 소품을 전달합니다.
// @src/App.jsx
import React from "react";
import { FaDev } from "react-icons/fa";
import styles from "./App.module.css";
import Sidebar from "./components/Sidebar";
import navigationData from "./data/navigation";
const App = () => {
return (
<div className={styles.container}>
<Sidebar navigationData={navigationData} />
<div className={styles.devLogo}>
<FaDev />
</div>
</div>
);
};
export default App;
결론
항상 그렇듯이 흥미롭게 보셨기를 바랍니다. 이 기사에서 오류를 발견했다면 댓글에 언급해 주세요. 🧑🏻💻
좋은 하루 되세요! 🙌
Reference
이 문제에 관하여(React 및 Tailwind를 사용하여 측면 탐색 모음을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/franciscomendes10866/how-to-create-a-sidebar-in-react-3dh6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
npm install classnames react-icons
// @src/data/navigation.js
export default ["Home", "Gallery", "Store", "Favorites", "Saved"];
/* @src/components/Sidebar.module.css */
.wrapper {
@apply fixed left-0 top-0 bottom-0 z-50 w-14 bg-white flex flex-col h-screen justify-between items-center py-6 rounded-tr-4xl rounded-br-4xl;
}
.logo {
@apply text-4xl text-gray-800;
}
.navListItems {
@apply flex flex-col items-center w-full;
}
.navItem {
@apply text-gray-400 hover:text-gray-800 text-xl py-4 cursor-pointer;
}
.navItemActive {
@apply text-blue-600 hover:text-blue-700;
}
.tooltip {
@apply absolute w-auto min-w-max left-16 text-base font-medium hidden;
}
.bottomWrapper {
@apply flex flex-col justify-between items-center;
}
.notifications {
@apply w-10 h-10 bg-gray-100 hover:bg-gray-200 cursor-pointer rounded-xl flex items-center justify-center text-gray-800 text-lg relative mb-4;
}
.badge {
@apply h-5 w-5 flex justify-center items-center text-white absolute -top-1 -right-1 bg-red-500 text-xs rounded-full;
}
.settingsLogo {
@apply text-3xl text-gray-400 hover:text-gray-800 cursor-pointer;
}
// @src/components/Sidebar.jsx
import React, { useState, useCallback } from "react";
import { IoLogoEdge, IoBookmark } from "react-icons/io5";
import {
BsImageFill,
BsFillHandbagFill,
BsFillStarFill,
BsHouseFill,
} from "react-icons/bs";
import { RiSettings4Fill } from "react-icons/ri";
import { FaRegBell } from "react-icons/fa";
import classNames from "classnames";
import styles from "./Sidebar.module.css";
const Sidebar = ({ navigationData }) => {
const [currentRoute, setCurrentRoute] = useState("Home");
const renderIcon = useCallback((element) => {
switch (element) {
case "Home":
return <BsHouseFill />;
case "Gallery":
return <BsImageFill />;
case "Store":
return <BsFillHandbagFill />;
case "Favorites":
return <BsFillStarFill />;
case "Saved":
return <IoBookmark />;
}
}, []);
return (
<nav className={styles.wrapper}>
<span className={styles.logo}>
<IoLogoEdge />
</span>
<ul className={styles.navListItems}>
{navigationData.map((element, index) => (
<li
key={index}
className={classNames([
styles.navItem,
currentRoute === element && styles.navItemActive,
"group",
])}
onClick={() => setCurrentRoute(element)}
>
{renderIcon(element)}
<span
className={classNames([styles.tooltip, "group-hover:inline"])}
>
{element}
</span>
</li>
))}
</ul>
<div className={styles.bottomWrapper}>
<div className={styles.notifications}>
<span className={styles.badge}>24</span>
<FaRegBell />
</div>
<span className={styles.settingsLogo}>
<RiSettings4Fill />
</span>
</div>
</nav>
);
};
export default Sidebar;
/* @src/App.module.css */
.container {
@apply bg-gray-200;
}
.devLogo {
@apply flex items-center justify-center text-5xl text-gray-300 h-screen;
}
// @src/App.jsx
import React from "react";
import { FaDev } from "react-icons/fa";
import styles from "./App.module.css";
import Sidebar from "./components/Sidebar";
import navigationData from "./data/navigation";
const App = () => {
return (
<div className={styles.container}>
<Sidebar navigationData={navigationData} />
<div className={styles.devLogo}>
<FaDev />
</div>
</div>
);
};
export default App;
Reference
이 문제에 관하여(React 및 Tailwind를 사용하여 측면 탐색 모음을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/franciscomendes10866/how-to-create-a-sidebar-in-react-3dh6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)