التخطيط باستخدام Box
ابنِ هيكل لوحة المعلومات باستخدام Flexbox بوحدات الخلايا: شريط علوي، وشريط جانبي وبطاقات.
في هذا الفصل
- شريط علوي
- شريط جانبي وبطاقات
- التجاوب افتراضيًا
وحدة التحكم شبكة من الخلايا. يخططها Text.js باستخدام Yoga، وهو محرك flexbox نفسه الذي يستخدمه React Native، لذا يتبع <Box> قواعد flexbox في CSS. الوحدات هي الخلايا: يضيف p-1 حشوًا بمقدار عمود واحد وصف واحد.
شريط علوي
معظم الشاشات عبارة عن عمود: شريط من صف واحد، ثم بقية المحتوى. امنح الشريط ارتفاعًا ثابتًا باستخدام h-1 ودع المحتوى يشغل المساحة المتبقية باستخدام grow.
المحذوف: import { Box, Text, useInput } from "@textjs/app";المضاف: import { Box, Spacer, Text, useInput } from "@textjs/app";export default function Page() { return (المحذوف: <Box className="flex-col border rounded px-2 py-1">المحذوف: <Text bold>▼ Acme Deploys</Text>المحذوف: <Text color="muted">Hello, console.</Text>المضاف: <Box className="flex-col grow">المضاف: <Box className="flex-row h-1 px-1 gap-2 shrink-0">المضاف: <Text bold>▼ Acme</Text>المضاف: <Text color="subtle">acme.local</Text>المضاف: <Spacer />المضاف: </Box>المضاف: <Box className="flex-row grow">{/* sidebar + cards */}</Box> </Box> );}<Spacer> صندوق يتمدد: يدفع كل ما يليه إلى الحافة اليمنى.
شريط جانبي وبطاقات
أضف شريطًا جانبيًا بعرض ثابت وحد أيمن وثلاث بطاقات تتقاسم العرض المتبقي. يمنح basis-0 مع grow كل بطاقة حصة متساوية بغض النظر عن محتواها.
المضاف: const NAV = ["Overview", "Deployments", "Settings"];المضاف: المضاف: function Card({ title, value }: { title: string; value: string }) {المضاف: return (المضاف: <Box className="flex-col border rounded px-1 grow shrink basis-0" minWidth={14} minHeight={4}>المضاف: <Text color="subtle">{title}</Text>المضاف: <Text bold>{value}</Text>المضاف: </Box>المضاف: );المضاف: }المضاف: export default function Page() {المضاف: const [sidebar, setSidebar] = useState(true);المضاف: const [stacked, setStacked] = useState(false);المضاف: المضاف: useInput((e) => {المضاف: if (e.input === "s") setSidebar((v) => !v);المضاف: if (e.input === "d") setStacked((v) => !v);المضاف: });المضاف: return ( <Box className="flex-col grow"> {/* top bar */}المحذوف: <Box className="flex-row grow">{/* sidebar + cards */}</Box>المضاف: <Box className="flex-row grow">المضاف: {sidebar && (المضاف: <Box className="flex-col w-18 shrink-0 border-r px-1 pt-1">المضاف: {NAV.map((item) => <Text key={item}>{item}</Text>)}المضاف: </Box>المضاف: )}المضاف: <Box className={stacked ? "flex-col grow gap-1 p-1" : "flex-row grow items-start gap-1 p-1"}>المضاف: <Card title="Production" value="acme-web" />المضاف: <Card title="Deployments" value="6 today" />المضاف: <Card title="Build time" value="38s p50" />المضاف: </Box>المضاف: </Box> </Box> );}اضغط s و d في وحدة التحكم. يعيد Yoga حساب التخطيط وتُعاد رسم الصفوف التي تغيرت فقط، لذا لا يتطلب تبديل ظهور الشريط الجانبي سوى استدعاء واحد للدالة console.log.
التجاوب افتراضيًا
تتبع الشبكة أبعاد لوحة DevTools المثبتة. اسحب وحدة التحكم لتوسيعها أو زيادة ارتفاعها، فتُعاد موضعة البطاقات. عند الحاجة إلى نقاط توقف، يعيد useBreakpoint() نقطة التوقف الحالية بوحدة الخلايا.
جرّبه
هذا تطبيق Acme Deploys في نهاية الفصل، يعمل في DevTools. انقر اللوحة، ثم استخدم المفاتيح أدناه.
فتح وحدة التحكم
يُعرض التطبيق في DevTools.فعّل أولًا «إظهار الميزات لمطوري الويب» في إعدادات Safari → متقدم. ثم انقر هنا واضغط s.
الفتح على حاسوب مكتبي
يُعرض هذا التطبيق في وحدة تحكم DevTools، التي تتطلب متصفحًا على حاسوب مكتبي.
اختبار
2 سؤالانأجب عن كل سؤال لإكمال الفصل.