استفاده از Grommet در کاربردهای واکنش – مجله سر و صدا
در طول سال ها ، اکوسیستم React با اختراع کتابخانه هایی که به توسعه برنامه های React کمک می کنند ، رشد کرده است. در این آموزش ، ما قصد داریم که استفاده کنیم گرمت برای توسعه م componentsلفه های پاسخگو ، قابل دسترسی و همراه اول برای برنامه های React. ما نگاه مفصلی به مفاهیم اصلی آن ، برخی موارد استفاده از آن خواهیم انداخت و یک مثال ساده خواهیم ساخت. توجه به این نکته مهم است که Grommet منبع باز با 6.9k ستاره روشن است GitHub.
این آموزش برای خوانندگانی که علاقه مند به توسعه م componentsلفه های پاسخگو در برنامه React خود با استفاده از Grommet هستند مفید خواهد بود. این مقاله نیاز به درک اساسی از عناصر React و Styled دارد.
گرمت چیست؟
گرمت یک کتابخانه م componentلفه React است که از اجزای کد همراه اول پاسخگو و قابل دسترسی برخوردار است. این کار را از طریق اجزای خود انجام می دهد – که عناصر سازنده کتابخانه هستند. آنها شامل چیدمان ها ، انواع ، رنگ ها ، کنترل ها ، ورودی ها ، رسانه های تجسم و برنامه های کمکی هستند. تمام اجزای سازنده گرامت با قابلیت دسترسی و پاسخگویی در ذهن ساخته شده اند.
Grommet پشتیبانی از مشخصات W3C که باعث می شود امتیاز قابل توجهی از نظر دسترسی کسب کند. همچنین زمینه ها و ابزارهای قدرتمندی را فراهم می کند که به شما امکان می دهد رنگ ، نوع ، عناصر م componentلفه و نیازهای طرح را متناسب با نیازهای پروژه خود تنظیم کنید.
برخی از گزینه های محبوب Grommet شامل tailwindcss و اجزای مدل دار، اگرچه در بین توسعه دهندگان بسیار محبوب است ، اما هر چارچوب از نظر رویکرد در ساخت برنامه ها متفاوت است. Grommet با تلفن همراه اول ، قابل دسترسی ، پاسخگو و دارای موضوعات خارج از جعبه است و از W3C برای ایجاد آسان برنامه های React پشتیبانی می کند در حالی که Tailwind CSS یک چارچوب بسیار قابل تنظیم و سودمند است که به توسعه دهندگان اجازه می دهد بدون محدودیت CSS مانند برنامه های خود ، برنامه های کاربردی بسازند. قوانین آبشار م componentsلفه های سبک با هدف اجازه نوشتن کد CSS در JavaScript با استفاده از حروف الفبا به منظور کمک به توسعه دهندگان در نوشتن م reلفه های React قابل استفاده مجدد و همچنین از م componentsلفه ها به عنوان ساختار سبک سطح پایین استفاده می شود.
در پروژه خود ، ما از Grommet به دلیل اجزای قابل تنظیم ، قابلیت دسترسی و ویژگی های موضوعی که در ادامه این آموزش به آنها نیاز خواهیم داشت ، در پروژه های خود استفاده خواهیم کرد.
با استفاده از اجزای Grommet
گرمت مانند بسیاری دیگر از کتابخانه های م componentلفه با برخی از م componentsلفه ها برای طرح بندی و موضوعات مانند اجزای Box ، Card و Header از قبل ساخته شده است. برای استفاده از ابتدا ، باید بسته grommet را با استفاده از NPM یا نخ نصب کنید ، مانند بلوک کد زیر.
npm i grommet styled-components
یا:
yarn add grommet styled-components
با توجه به موارد فوق ، می بینید که ما نیز اجزای سبک را نصب کردیم. این به این دلیل است که Grommet از م componentsلفه های سبک برای سفارشی سازی سبک ها در م componentsلفه ها استفاده می کند. توصیه می شود اجزای سبک را در پروژه های خود نصب کنید.
برای استفاده از م Gلفه Grommet در یک پروژه React ، باید وارد کنید grommet
. بیایید برای توضیح یک جز below کارت زیر ایجاد کنیم:
import React from 'react';
import { Grommet, Card } from 'grommet';
export default function GrommetExample() {
return (
<Card>
<CardBody pad="medium">Body</CardBody>
<Button
icon={<Icons.Favorite color="red" />}
hoverIndicator
/>
</Card>
);
}
در بلوک کد بالا ، ابتدا وارد کنید Grommet
و Card
جز component از grommet
بسته را در پرونده خود قرار دهید ، سپس ما با استفاده از Card
م componentلفه ای که وارد کرده ایم. سبک ها را می توان به عنوان اشیایی مانند م likeلفه های Grommet اضافه کرد Button
یا می توان آنها را با استفاده از اجزای مدل شده سبک کرد.
با بررسی اجزای فرم بیایید نمونه های بیشتری از اجزای Grommet را مشاهده کنیم
چرا گرمت؟
هدف اصلی Grommet بهبود تجربه توسعه دهندگان و ایجاد روشی سریعتر برای ساخت برنامه های React با اولین ، قابلیت دسترسی و پاسخگو بودن به تلفن همراه است. Grommet به صورت یکپارچه یک طرح و یک گردش کار توسعه دهنده را برای ایجاد یک تجربه یکپارچه تراز می کند و کار را برای هر کسی بسیار آسان می کند.
Grommet همچنین از خوانندگان صفحه خارج از جعبه پشتیبانی می کند ، انواع تم مانند حالت تاریک از grommet خارج از جعبه دریافت می شود و می توان آنها را با استفاده از themeMode
مانند یک برنامه React ، مانند زیر پشتیبانی کنید.
import React from "react";
import { Grommet, Box, Button, Heading, dark } from "grommet";
import { grommet } from "grommet";
const App = () => {
const [darkMode, setDarkMode] = React.useState(false);
return (
<Grommet full theme={grommet} themeMode={darkMode ? "dark" : "light"}>
<Box pad="large">
<Heading level="1">Grommet Darkmode toggle</Heading>
<Button
label="Toggle Theme"
primary
alignSelf="center"
margin="large"
onClick={() => setDarkMode(!darkMode)}
/>
</Box>
</Grommet>
);
};
export default App;
در بلوک کد بالا ، ما از themeMode
ویژگی برای اضافه کردن یک حالت تاریک. با استفاده از یک اپراتور سه گانه ، بررسی می کنیم که آیا صفحه در حالت تاریک قرار دارد یا خیر ، می توانیم آن را به حالت روشن تغییر دهیم ، سپس دکمه ای را برای تغییر حالت تاریک و روشن روی برنامه خود اضافه کردیم ، می توانید از اینجا نسخه آزمایشی را بررسی کنید جعبه کد.
Grommet همچنین می تواند با سایر چارچوب ها وجود داشته باشد و سبکی جهانی به آن اضافه نمی کند که بر اجزای موجود در برنامه React شما تأثیر بگذارد ، توابع و سبک ها می توانند در یک شی به معنای واقعی برای سبک ها قرار گیرند. Grommet همچنین از اجزای Layout بهره می برد که دارای برخی از خصوصیات CSS مانند flexbox است ، همچنین کلیه خصوصیات flexbox را به عنوان غرفه در اختیار شما قرار می دهد.
Grommet دارای یک کتابخانه بزرگ از نمادهای SVG است که با استفاده از <Icon />
م componentلفه ، برخلاف بسیاری از چارچوب های دیگر. Grommet از م componentsلفه هایی برای تجسم داده ها مانند نمودارهای میله ای ، نقشه ها و حتی ردیاب های پیشرفت برخوردار است.
امروزه چندین شرکت از Grommet برای ایجاد برنامه های واقعی استفاده می کنند ، از جمله Netflix ، IBM ، Sony ، Samsung ، Shopify ، GitHub و Twilio.
ساخت یک م Pricلفه قیمت گذاری با Grommet
اکنون ما اصول و مفاهیم اصلی Grommet را می دانیم ، ما قصد داریم یک م componentلفه قیمت گذاری با استفاده از م componentsلفه های Grommet ایجاد کنیم ، این بخش باید از اجزایی مانند Card ، Box و Buttons از کتابخانه Grommet استفاده کند.
بدون نگرانی بیشتر ، شروع کنیم!
تنظیم محیط
ابتدا ، بیایید یک برنامه React بدون نیاز ایجاد کنیم ، کد کد زیر را در ترمینال خود بنویسیم.
create-react-app grommet-app
کد بالا با استفاده از یک برنامه React لخت ایجاد می کند ایجاد-واکنش-برنامه بسته بندی وارد فهرست پروژه شوید.
cd grommet-app
بعدی نصب وابستگی هایی است که در پروژه خود نیاز داریم.
yarn add grommet styled-components
اگر این کار را انجام داده اید ، با استفاده از دستور زیر سرور پروژه را شروع کنید.
yarn start
برای این پروژه ، ما به یک جز single واحد برای کارتها و سبک خود با اجزای سبک نیاز داریم.
بیایید اولین کارت را در زیر ایجاد کنیم
import React from "react";
import styled from "styled-components";
export default function GrommetCard() {
return (
<>
<CardWrapper>
<Card left>
<Div>
<Div>
<CardContent>
<small>Basic</small>
<h1>$588</h1>
</CardContent>
<CardContent>
<p>500 GB storage</p>
</CardContent>
<CardContent>
<p>2 Users Allowed</p>
</CardContent>
<CardContent>
<p>Send Up To 3 GB</p>
</CardContent>
</Div>
<CardButton secondary>LEARN MORE</CardButton>
</Div>
</Card>
</CardWrapper>
</>
);
}
در بلوک کد بالا ، ما از م componentلفه استفاده می کنیم CardWrapper
برای پوشاندن همه ما Card
م componentsلفه ها ، بعد ما یک م componentلفه جدید اضافه کردیم ، CardContent
که برای بسته بندی تمام مطالب ما در هر جز card کارت استفاده می شود. CardButton
جز component یک جز button دکمه ای است که در کارتهای Grommet روی کارتها استفاده می شود.
در مرحله بعدی ، بیایید سبک هایی را برای برنامه خود با استفاده از اجزای مدل شده ایجاد کنیم. پرونده را در زیر بنویسید:
const primaryGradient = "linear-gradient(hsl(236, 72%, 79%), hsl(237, 63%, 64%))";
const CardWrapper = styled.div`
display: flex;
justify-content: center;
align-items: center;
height: max-content;
margin: 20px;
@media all and (max-width: 1240px) {
flex-direction: column;
}
`;
در بالا ، ما یک شی style سبک را برای خود تعریف کردیم CardWrapper
در برنامه ما بیایید اشیا style سبک را برای م componentلفه کارت خود در بالا اضافه کنیم.
const Card = styled.div`
min-width: 380px;
box-shadow: 3px -2px 19px 0px rgba(50, 50, 50, 0.51);
border-radius: ${(props) => (props.left ? " 6px 0 0 6px" : props.right ? "0 6px 6px 0" : "6px")};
background: ${(props) => (props.secondary === undefined ? "#fff" : primaryGradient)};
padding: 25px 20px;
height: ${(props) => (props.center ? "520px" : "480px")};
display: flex;
justify-content: center;
align-items: center;
@media all and (max-width: 1240px) {
margin-bottom: 20px;
border-radius: 6px;
height: 480px;
}
@media all and (max-width: 420px) {
min-width: 90%;
}
`;
بیایید سبک های بیشتری را به اجزای خود اضافه کنیم.
const CardButton = styled.div`
min-width: 100%;
padding: 10px 15px;
min-height: 50px;
box-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2), 0px 0px 2px rgba(0, 0, 0, 0.2);
color: ${(props) => (props.secondary !== undefined ? "#fff" : "#7c7ee3")};
background: ${(props) => (props.secondary === undefined ? "#fff" : primaryGradient)};
text-align: center;
margin-top: 25px;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 16px;
border-radius: 6px;
`;
const CardContent = styled.div`
width: 100%;
color: ${(props) => (props.secondary !== undefined ? "#fff" : "#000")};
padding-bottom: 10px;
margin-bottom: 10px;
border-bottom: 1.3px solid #eee;
text-align: center;
`;
const Div = styled.div`
min-width: 100%;
`;
وقتی همه این کارها را انجام دادیم ، پروژه ما باید شبیه تصویر زیر باشد.

ما باید کارتهای بیشتری را به بخش خود با استفاده از کد کد زیر اضافه کنیم.
<Card center secondary>
<Div>
<Div>
<CardContent secondary>
<small>Premium</small>
<h1>$788</h1>
</CardContent>
<CardContent secondary>
<p>75 GB storage</p>
</CardContent>
<CardContent secondary>
<p>4 Users Allowed</p>
</CardContent>
<CardContent secondary>
<p>Send Up To 5 GB</p>
</CardContent>
</Div>
<CardButton>LEARN MORE</CardButton>
</Div>
</Card>
<Card right>
<Div>
<Div>
<CardContent>
<small>PRO</small>
<h1>$1000</h1>
</CardContent>
<CardContent>
<p>1TB storage</p>
</CardContent>
<CardContent>
<p>Unlimited Users Allowed</p>
</CardContent>
<CardContent>
<p>Send Up To 10 GB</p>
</CardContent>
</Div>
<CardButton secondary>LEARN MORE</CardButton>
</Div>
</Card>
</CardWrapper>
</>
);
}
در اینجا ، ما دو م cardلفه کارت دیگر ایجاد کردیم ، ملفه های سفارشی خود را با م styلفه های سبک اضافه کردیم و از اشیا style سبک که در بالا تعریف کردیم ، برای بسته بندی اجزای Grommet و بهبود سبک استفاده کردیم.
برنامه کارت قیمت نهایی ما باید مانند تصویر زیر باشد.

استفاده از Grommet در تولید (برنامه لیست ساختمان)
برای دیدن نمونه ای از اینکه استفاده از Grommet در برنامه دیگری به نظر می رسد ، قصد داریم یک برنامه ساده بسازیم که به کاربر امکان اضافه کردن ، مشاهده و حذف موارد لیست را می دهد. ما برای مدیریت وضعیت برنامه ، Grommet برای اجزای UI و اجزای سبک برای یکپارچه سازی برنامه خود ، از React Context API داخلی استفاده خواهیم کرد.
باز هم ، بیایید با استفاده از دستور زیر یک برنامه واکنش را آغاز کنیم.
create-react-app list-app
سی دی را به فهرست پروژه وارد کنید
cd list-app
yarn add grommet grommet-controls grommet-icons styled-components
در بلوک کد بالا ، ما نصب کردیم:
grommet |
کتابخانه م componentلفه های UI ما |
grommet-controls ، grommet-icons |
آیکون ها و بسته های کنترلی که برای کار با Grommet باید نصب کنیم |
styled-components |
برای استفاده از اصطلاحات علامت گذاری شده برای یک ظاهر طراحی شده به اجزای سازنده و اندازه گیری واکنش نشان می دهد |
ساخت متن برنامه
در این برنامه ، ما باید داده های کاربر را در چندین م componentsلفه به اشتراک بگذاریم تا به این نتیجه برسیم که از Context API استفاده می کنیم. با استفاده از این ، ما می توانیم یک متن زمینه ایجاد کنیم که لیست ها و منطق برنامه ما را در خود نگه دارد. برای کسب اطلاعات بیشتر در مورد API Context می توانید این مقاله را بررسی کنید.
برای ایجاد زمینه برنامه ما ، ابتدا پوشه ای به نام ایجاد کنید context
در src
فهرست برنامه ما ، سپس فایلی به نام ایجاد کنید AppContext.js
این پرونده برای تمام زمینه های برنامه ما خواهد بود ، بیایید این کار را در بلوک کد زیر انجام دهیم:
import React, { createContext, useState } from 'react';
export const Context = createContext();
const AppContext = ({children}) => {
const [lists, setLists] = useState([]);
const removeList = item => {
let newLists = [...lists];
lists.map((list, id) => {
return list === item && newLists.splice(id, 1);
});
setLists(newLists);
}
در بلوک کد بالا ، ما قلاب API زمینه را وارد کردیم createContext
و useState
همه را از React با استفاده از قلاب کنید useState
م componentلفه ، ما یک حالت مرکزی برای برنامه خود ایجاد کردیم ، این کار به این دلیل انجام شد که م componentلفه بتواند به عنوان یک ارائه دهنده زمینه برای سایر م componentsلفه های برنامه ما عمل کند. بعد ، ما یک متغیر جدید به نام ایجاد کردیم removeList
که یک مورد را به عنوان یک پارامتر در اختیار شما قرار می دهد ، با استفاده از عملگر spread ما آنچه را که در حالت است گسترش می دهیم و جسمی را که برابر با موردی که می خواهیم حذف کنیم خارج می کنیم.
بعد ، ما از منطق بالا برای ایجاد روشهایی برای اضافه کردن و حذف موارد لیست در برنامه خود استفاده خواهیم کرد ، این کار را در بلوک کد زیر انجام می دهیم:
return (
<Context.Provider value={{
lists,
addToLists: (newItem) => setLists([...lists, newItem]),
deleteFromList: (item) => removeList(item)
}}>
{children}
</Context.Provider>
)
}
export default AppContext;
در اینجا ، ما در حال بازگشت هستیم Context.Provider
و پذیرفتن وسایل بچه ، ما این کار را انجام می دهیم تا م componentلفه دیگر بتواند به خصوصیاتی که در مقادیر مقدار عبور می دهیم دسترسی پیدا کند ، lists
هدف در لیست های ما ، addToList
روش در می گیرد newItem
پارامتر برای اضافه کردن لیست های جدید به حالت برنامه ما و deleteFromList
موردی را از فروشگاه لیست حذف یا حذف می کند.
ساخت م Listلفه لیست
در این بخش ، ما می خواهیم م Listلفه List خود را با استفاده از Grommet برای م Uلفه های UI خود و مledلفه های سبک خود برای سبک دادن به برخی از بخش های UI خود بسازیم. ابتدا یک پوشه کامپوننت در داخل برنامه ما ایجاد کنید src
فهرست ، سپس در داخل پوشه اجزا ، یک فایل جدید ایجاد کنید List.js
و در داخل آن ، کد زیر را بنویسید.
import React from "react";
import styled from "styled-components";
import { Card, CardBody, Box, Text, Button } from "grommet";
function List(props) {
return (
<StyledDiv>
<Card>
<CardBody className="card_body">
<Box direction="row" className="item_box">
<Text className="text">{props.list}</Text>
<Box className="button_box">
<Button
onClick={props.deleteList.bind(this, props.list)}
className="button"
>
Delete
</Button>
</Box>
</Box>
</CardBody>
</Card>
</StyledDiv>
);
}
export default List;
در کد بالا ، ما ابتدا اجزای Card ، CardBody ، Box ، Text و Button را از grommet وارد کردیم ، سپس یک م aلفه List ایجاد کردیم تا در غرفه ها استفاده کنیم ، با استفاده از م Gلفه های Grommet یک م cardلفه کارت با یک دکمه حذف ایجاد کردیم که به صورت خودکار به یک لیست. بعدی این است که جز component خود را در زیر سبک دهید:
const StyledDiv = styled.div`
.button {
background-color: #8b0000;
color: white;
padding: 10px;
border-radius: 5px;
}
.card_body {
padding: 20px;
margin-top: 20px;
}
.item_box {
justify-content: space-between;
}
.text {
margin-top: auto;
margin-bottom: auto;
}
`;
پس از انجام موارد فوق ، م componentلفه ما باید مانند تصویر زیر باشد.

ساخت م Displayلفه نمایش لیست
این م componentلفه همه لیست هایی را که اضافه کرده ایم نمایش می دهد و همچنین به محض افزودن لیست جدید به طور خودکار دکمه حذف ایجاد می کند.
import React from "react";
import List from "./List";
import { Context } from '../context/AppContext';
function ListDisplay() {
return (
<Context.Consumer>
{(context) => (
<div className="container">
{context.lists.length ?
context.lists.map((list, id) => (
<List key={id} list={list} deleteList={context.deleteFromList} />
)) : null
}
</div>
)}
</Context.Consumer>
);
}
export default ListDisplay;
در این م componentلفه ، یک تابع ایجاد کردیم ListDisplay
و با استفاده از Context.Consumer
از ما appContext
جز component ، بعد با استفاده از a div
برای برچسب کانتینر ما ، ساختار آن را تغییر دادیم list
و deleteList
روش ها از متن برنامه ، با این کار می توانیم آنها را به عنوان غرفه منتقل کنیم. بعد ، ما نقشه را از طریق lists
برای بازگرداندن یک لیست جدید ، که می توانیم آن را در ساخت یک لیست واحد با عبور دادن آبجکت برگشتی به عنوان props به List
جزء.
م componentلفه ما با لیست های اضافه شده باید به این شکل باشد:

کامپوننت NavBar
این م componentلفه عمده برنامه ما خواهد بود ، در اینجا ما م componentلفه خود را با استفاده از پاره خواهیم کرد Context.Consumer
و مانند سایر اجزای خود ، ما از یک ظاهر طراحی شده با اجزای مدل دار استفاده خواهیم کرد. بیایید این م componentلفه را در زیر بسازیم.
import React, { useState } from "react";
import { Heading, Form, TextInput, Button } from "grommet";
import styled from "styled-components";
import { Context } from '../context/AppContext';
function Navbar() {
const [value, setValue] = useState("");
return (
<Context.Consumer>
{store => (
<StyledDiv className="container">
<Heading className="title">Grommet List App</Heading>
<Form onSubmit={() => store.addToLists(value)} className="form-group">
<TextInput
className="form"
value={value}
type="text"
onChange={(e) => setValue(e.target.value)}
placeholder="Enter item"
/>
<Button type="submit" className="button">Add to List</Button>
</Form>
</StyledDiv>
)}
</Context.Consumer>
);
}
const StyledDiv = styled.div`
.button {
margin-top: 10px;
background-color: purple;
color: white;
padding: 10px;
border-radius: 5px;
}
`;
export default Navbar;
ابتدا ، برای دستیابی به خصوصیات موجود در ارائه دهنده زمینه برنامه ، م componentلفه خود را در a قرار دادیم Context.Consumer
جزء. بعد ، ما اضافه کردیم Heading
از Grommet برچسب گذاری کنید ، و سپس با استفاده از روش ، فرم ورودی برای افزودن لیست های خود ایجاد کردیم addToList
که یک پارامتر مقدار را به خود اختصاص می دهد (در مورد ما مقدار ورودی کاربر است). آخرین اما نه کمترین ، ما یک دکمه ارسال برای رسیدگی به فرم ارسال اضافه کردیم.
پس از درست انجام شدن ، برنامه ما باید به صورت زیر باشد:

نتیجه
در این مقاله ، ما درباره Grommet ، یک کتابخانه م componentلفه با پاسخگویی و قابلیت دسترسی در ذهن ، یاد گرفتیم. ما همچنین مراحل ایجاد یک برنامه م componentلفه قیمت گذاری را با استفاده از Grommet و یک برنامه لیست طی کردیم. با استفاده از Grommet برای م componentلفه خود و نیازهای UI برای برنامه React بعدی خود لذت ببرید. کد برنامه لیست Grommet را می توانید در اینجا پیدا کنید جعبه کد و م componentلفه قیمت گذاری را می توان یافت اینجا.
منابع
