我如何为我的 React Native 项目设置设计系统以加快开发速度

曾经构建过您不想自己使用的应用程序吗?

当我还是一名初级应用程序开发人员时,我曾经构建混乱的用户界面。

有时,当看到这些 ui 时,我曾经想“世界上谁会想使用这个?它看起来很糟糕”。

其他时候,只是有些“不对劲的地方”我无法指出。

虽然我曾经从设计团队那里获得过令人惊叹的精美设计,但我的应用程序看起来连 20% 都没有那么好。

我意识到了这个问题,为了解决这个问题,我深入研究了这个问题,其中我发现了一个设计系统的概念,它改变了我构建应用程序的方式。

设计系统这个神奇的东西是什么?

理解设计系统是什么至关重要,这样才能理解我们为什么需要它。

设计系统基本上是您和您的团队设计决策的集中事实来源。它告诉您要使用什么颜色以及在哪里使用?该应用程序将有多少种类型的按钮?您列表中的卡片会有阴影吗?所有的答案都来自于设计系统。

以下是拥有设计系统的一些好处:

一致的用户界面:您的界面不会无缘无故地到处都有那些奇怪的间隙。它在所有设备上的外观和感觉都是统一的。

快速决策:设计系统强制执行一组特定的约束,使您的决策更容易,而不是更困难。你拥有的选择越多,你遇到的分析瘫痪就越多。

可扩展的应用程序:随着应用程序的增长,设计系统有助于重用组件,而不是从头开始构建。

专注于开发:您不再需要强调按钮应该是绿色还是蓝色。相反,您将专注于重要的事情。

工具和库

虽然有大量的 react native ui 库,但我使用自定义方法,因为我在其中大多数库的性能和错误方面都有过可怕的经历。

我的方法唯一依赖的库是react-native-size-matters。

现在,在您尖叫“尺寸并不重要!”之前,让我向您保证,尺寸确实重要。尤其是在移动应用程序方面。

您不希望用户打开您的应用程序,看到一个覆盖所有内容的巨大徽标,然后在删除之前思考“丑陋的是什么……”,甚至不尝试就删除,因为您的徽标隐藏了按钮。

这就是react-native-size-matters 可以发挥作用的地方。它通过缩放组件以适应设备来使您的应用程序具有响应能力。因此,无论用户使用哪种设备,您的徽标都会准确地保留在您放置的位置。

设置主题

我定义的第一件事就是我的核心设计标记。这些是我的设计系统的构建模块。其中包括调色板、版式、间距和字体大小。

我通过使用以下代码创建 theme.ts 文件来实现此目的:

import {moderatescale} from 'react-native-size-matters';// after installing custom fonts:export const fontfamily = {  bold: 'poppins-bold',  semibold: 'poppins-semibold',  medium: 'poppins-medium',  regular: 'poppins-regular',  thin: 'poppins-thin',};const colors = {  primary100: '#2e2c5f',  primary80: '#524da0',  primary60: '#736ddf',  primary40: '#a09bff',  primary20: '#dcdaff',  secondary100: '#484a22',  secondary80: '#858945',  secondary60: '#d9df6d',  secondary40: '#f8fca1',  secondary20: '#fdffd4',  neutral100: '#131218',  neutral90: '#1d1c25',  neutral80: '#272631',  neutral70: '#343341',  neutral60: '#3e3d4d',  neutral50: '#53526a',  neutral40: '#757494',  neutral30: '#9c9ac1',  neutral20: '#cbc9ef',  neutral10: '#e8e7ff',  white: '#fff',  black: '#222',  error: '#e7002a',  success: '#3ec55f',  warning: '#fecb2f',  info: '#157efb',};const theme = {  colors,  fontsizes: {    xxl: moderatescale(32),    xl: moderatescale(28),    lg: moderatescale(24),    md: moderatescale(20),    body: moderatescale(17),    sm: moderatescale(14),    xs: moderatescale(12),    xxs: moderatescale(10),    xxxs: moderatescale(8),  },  spacing: {    none: 0,    xxs: moderatescale(4),    xs: moderatescale(8),    md: moderatescale(12),    lg: moderatescale(16),    xl: moderatescale(20),    xxl: moderatescale(24),    xxxl: moderatescale(28),  },};export default theme;

创建可重用组件

一旦我的设计令牌就位,我就会定义一些可重用的组件,例如 box、typography 和 input。这些组件遵循设计令牌,确保整个应用程序的一致性。

例如,这是我创建 box 组件的方法:

import {  view,  type viewprops,  type flexaligntype,  type viewstyle,} from 'react-native';import theme from '../styles/theme/theme';export interface ibox extends viewprops {  backgroundcolor?: keyof typeof theme.colors;  p?: keyof typeof theme.spacing;  pv?: keyof typeof theme.spacing;  ph?: keyof typeof theme.spacing;  pt?: keyof typeof theme.spacing;  pb?: keyof typeof theme.spacing;  pl?: keyof typeof theme.spacing;  pr?: keyof typeof theme.spacing;  m?: keyof typeof theme.spacing;  mv?: keyof typeof theme.spacing;  mh?: keyof typeof theme.spacing;  mt?: keyof typeof theme.spacing;  mb?: keyof typeof theme.spacing;  ml?: keyof typeof theme.spacing;  mr?: keyof typeof theme.spacing;  gap?: number;  flex?: number;  flexdirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';  alignitems?: flexaligntype;  justifycontent?:    | 'center'    | 'flex-start'    | 'flex-end'    | 'space-between'    | 'space-around'    | 'space-evenly';  rounded?: boolean;}export default function box({  backgroundcolor,  p,  pv,  ph,  pt,  pb,  pr,  pl,  m,  mv,  mh,  mt,  mb,  ml,  mr,  children,  style,  flex,  alignitems,  justifycontent,  flexdirection = 'column',  rounded = false,  gap = undefined,  ...rest}: ibox) {  const getmargin = () => {    const obj: any = {};    if (m) {      obj.margin = theme.spacing[m];      return obj;    }    if (mt) obj.margintop = mt ? theme.spacing[mt] : 0;    if (mb) obj.marginbottom = mb ? theme.spacing[mb] : 0;    if (ml) obj.marginleft = ml ? theme.spacing[ml] : 0;    if (mr) obj.marginright = mr ? theme.spacing[mr] : 0;    if (mv) obj.marginvertical = theme.spacing[mv];    if (mh) obj.marginhorizontal = theme.spacing[mh];    return obj;  };  const getpadding = () => {    const obj: any = {};    if (p) {      obj.padding = theme.spacing[p];      return obj;    }    if (pt) obj.paddingtop = pt ? theme.spacing[pt] : 0;    if (pb) obj.paddingbottom = pb ? theme.spacing[pb] : 0;    if (pl) obj.paddingleft = pl ? theme.spacing[pl] : 0;    if (pr) obj.paddingright = pr ? theme.spacing[pr] : 0;    if (pv) obj.paddingvertical = theme.spacing[pv];    if (ph) obj.paddinghorizontal = theme.spacing[ph];    return obj;  };  const boxstyles: viewstyle[] = [    {      backgroundcolor: backgroundcolor        ? theme.colors[backgroundcolor]        : undefined,      flex,      justifycontent,      alignitems,      flexdirection,      borderradius: rounded ? 10 : 0,      gap,    },    getmargin(),    getpadding(),    style,  ];  return (          {children}      );}

我使用这个新创建的 box 组件来替代 view。它允许我通过 props 快速设计它的样式(如果您使用打字稿,则提供建议),如下所示:

我如何为我的 React Native 项目设置设计系统以加快开发速度

这是我如何创建 typography 组件的示例,我使用它来代替 react native 的 text 组件:

import react from 'react';import {text, type textprops} from 'react-native';import theme, {fontfamily} from '../styles/theme/theme';export interface itypography extends textprops {  size?: keyof typeof theme.fontsizes;  color?: keyof typeof theme.colors;  textalign?: 'center' | 'auto' | 'left' | 'right' | 'justify';  variant?: keyof typeof fontfamily;}export default function typography({  size,  color,  textalign,  children,  style,  variant,  ...rest}: itypography) {  return (          {children}      );}

以下是我向自定义排版组件添加样式的速度的预览:

我如何为我的 React Native 项目设置设计系统以加快开发速度

自定义使用主题挂钩

我没有一次又一次地导入主题,而是通过创建一个自定义的 usetheme 挂钩来使代码更具可读性,我在应用程序中的任何位置调用该挂钩来添加符合我的主题的样式。

为了做到这一点,我利用 react 的 context api 在应用程序中传递我的主题。

我创建了一个 themeprovider.tsx 文件,并在内部定义了 themecontext 和 themeprovider 以将我的应用程序组件包装在其中。代码如下:

import react, {type propswithchildren, createcontext} from 'react';import theme from './theme';export const themecontext = createcontext(theme);export default function themeprovider({children}: propswithchildren) {  return (    {children}  );}

然后,在我的应用程序组件内:

export default function app() {  return (                );}

现在我的整个应用程序都可以访问 themecontext,我创建了 usetheme 挂钩:

import {usecontext} from 'react';import {themecontext} from '../styles/theme/themeprovider';export default function usetheme() {  const theme = usecontext(themecontext);  return theme;}

现在我可以通过调用 usetheme 挂钩在任何地方访问我的主题,如下所示:

const theme = usetheme();// example usage:theme.colors.primary100;theme.spacing.md;theme.fontsizes.lg;

深色模式

为了实现深色模式,在 theme.ts 文件中,我添加了另一个包含深色模式颜色的调色板。

export const darktheme = {  // define dark mode colors here keeping the keys same as the light mode only changing the values.}

然后,在 themeprovider 中,我只需检查用户设置并切换主题,如下所示:

import {useColorScheme} from 'react-native';

export default function ThemeProvider({children}: PropsWithChildren) {
const isDarkMode = useColorScheme() === 'dark';
return (
{children}
);
}

结论

遵循这种清晰的结构化方法为我的应用带来了急需的清晰度、一致性和美观性,同时也将我的开发速度加快了至少 10 倍,因为我不再需要纠结于设计决策。

我鼓励您尝试这种方法,并在评论中让我知道你们的想法。也许稍微改进一下吧?

以上就是我如何为我的 React Native 项目设置设计系统以加快开发速度的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1492160.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Angular 通过部分水合和 SSR 提高应用性能
上一篇 2025年12月19日 14:34:25
typescript定义数据类型
下一篇 2025年12月19日 14:34:42

相关推荐

  • windows11如何创建和管理虚拟桌面_windows11虚拟桌面操作方法

    windows11如何创建和管理虚拟桌面_windows11虚拟桌面操作方法windows11如何创建和管理虚拟桌面_windows11虚拟桌面操作方法windows11如何创建和管理虚拟桌面_windows11虚拟桌面操作方法windows11如何创建和管理虚拟桌面_windows11虚拟桌面操作方法

    Windows 11 虚拟桌面功能可提升多任务处理效率,1、通过任务视图或 Win + Tab 创建新桌面;2、使用 Win + Ctrl + D 快速新建桌面;3、右键重命名桌面以区分用途;4、为各桌面设置独立壁纸便于识别;5、用 Win + Ctrl + 方向键在桌面间切换;6、在任务视图中调整…

    2026年9月26日 • 用户投稿
    300
  • mysql是什么意思

    mysql是什么意思mysql是什么意思mysql是什么意思mysql是什么意思

    MySQL是开源关系型数据库管理系统,特点是开源、可靠、可扩展、性能优异和面向社区。其用途广泛,包括存储Web应用程序数据、管理电子商务数据、建立数据仓库、支持内容管理系统和本地移动应用程序。 MySQL 是什么? MySQL 是一种开源关系型数据库管理系统 (RDBMS),它用于存储和管理数据。它…

    2026年9月25日 • 用户投稿
    000
  • 如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程

    如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程

    TensorFlow Lite通过模型转换、量化、剪枝等优化手段,将训练好的大模型压缩并加速,使其能在移动端高效推理。首先在服务器端训练模型,随后用TFLiteConverter转为.tflite格式,结合量化(如Float16或全整数量化)、量化感知训练、剪枝和聚类等技术减小模型体积、提升运行速度…

    2026年9月23日 • 用户投稿
    100
  • 构建出色的移动应用程序:Webman的移动开发指南

    构建出色的移动应用程序:Webman的移动开发指南 移动应用程序在当今数字化时代已经成为了重要的工具和娱乐方式。随着智能手机的普及和移动互联网的快速发展,越来越多的人依赖移动应用程序来满足各种需求。 当谈到移动应用程序开发时,Webman(虚构的应用程序开发公司)拥有丰富的经验和专业知识。本文将为您…

    2026年9月9日
    200
  • 使用Yii框架开发移动应用程序

    随着移动设备的普及,移动应用程序的需求越来越高,很多企业和个人都开始关注如何快速开发高质量的移动应用程序。在这个过程中,一个高效的开发框架是必不可少的。yii框架作为一个高性能、高可伸缩性、优雅而简单的php框架,与移动应用程序的开发结合起来,为移动应用程序开发者提供了一种灵活、节约时间和成本的开发…

    用户投稿 2026年9月6日
    000
  • app网站定制开发(自己开发app软件平台)

    php小编西瓜为您介绍app网站定制开发,是指根据客户需求,开发符合其特定需求的app软件平台。通过定制开发,可以实现个性化功能定制,提升用户体验和品牌形象。定制开发的优势在于灵活性高、安全性好、扩展性强,能够满足不同行业的需求。选择专业的开发团队进行定制开发,可以帮助企业更好地实现业务目标,提升竞…

    2026年9月5日
    500
  • composer怎么记忆

    通过关联性记忆、视觉辅助工具、分解记忆、定期复习、记忆宫殿技术、数字辅助工具和主动学习,作曲家的名字和作品的记忆力可以显著提高。 如何轻松记忆作曲家 记忆作曲家的名字和作品可能会让人望而生畏,但通过一些技巧和练习,你可以显著提高你的记忆力。 关联性记忆将作曲家与其作品、风格或所处时代联系起来。例如,…

    2026年9月5日
    100
  • catia composer是什么软件

    CATIA Composer(现称 3DEXPERIENCE Composer)是一款用于技术交流的强大 3D 软件,可创建和共享 3D 产品说明和培训材料。它的主要功能包括:创建交互式 3D 文档、技术写作、培训和仿真、协作和共享。它简化了技术交流流程,提高了文档的准确性和一致性,并改善了用户体验…

    2026年9月5日
    100
  • laravel适合开发什么

    Laravel 适用于开发各种 Web 应用程序,包括:企业应用程序:模块化架构和 RESTful API 支持开发复杂应用程序。电子商务:强大的 eCommerce 功能,包括购物车管理和支付网关集成。社交媒体平台:社交认证和社交媒体 API 集成,可开发社交媒体平台。API 开发:内置工具,可简…

    2026年8月30日
    000
  • laravel框架支持的几种数据库系统

    Laravel框架支持MySQL、PostgreSQL、MariaDB、SQL Server、SQLite和Oracle Database等数据库系统。选择数据库系统取决于特定应用程序的规模、性能、特性、成本和支持需求。 Laravel 框架支持的数据库系统 Laravel 是一个 PHP Web …

    2026年8月30日
    100
  • thinkphp能开发什么

    ThinkPHP 适用于快速开发各种 Web 应用程序,包括:1. 企业级应用(CRM、ERP、OA、物流管理、金融理财);2. 电子商务网站(网上商城、团购、C2C、B2C、支付系统);3. 博客和内容管理系统(博客、CMS);4. 论坛和社区(在线新闻、杂志);5. 移动应用程序(移动端网站、移…

    2026年8月30日
    000
  • 提升我的 Web 开发技能:HNG 实习和前端技术的迷人世界

    开始新事物的兴奋感永远不会消失,尤其是当它涉及到像 HNG 实习这样的强化项目时 [https://hng.tech/internship 和 https://hng.tech/premium]。这就像再次参加编码训练营,但这一次有令人兴奋的机会来突破我的极限并加快学习速度。 HNG 实习中真正令我…

    2025年12月24日
    000
  • 深入理解 Express.js 中间件与 next 函数:构建高效请求处理流程

    本文深入探讨 Express.js 中间件的核心机制,重点解析 next 函数在请求处理流程中的关键作用。通过实际代码示例,我们将学习如何构建自定义中间件进行身份验证、如何利用 next 函数控制请求流向、在中间件之间传递数据,以及串联多个中间件以实现模块化和可维护的服务器端应用。掌握 next 函…

    2025年12月20日
    200
  • 测试自动化工具:综合指南

    在当今快节奏的软件开发领域,高效的测试至关重要。测试自动化工具应运而生,它们能够显著提升测试效率,缩短交付周期,并最终确保软件质量。本文将深入探讨测试自动化工具的方方面面,包括其定义、核心功能、常用工具及选择策略。 什么是测试自动化工具? 测试自动化工具是用于自动执行测试用例的软件应用程序,旨在减少…

    2025年12月19日
    100
  • 开发人员如何使电动汽车充电器能够与移动应用程序通信

    开发人员如何使电动汽车充电器能够与移动应用程序通信开发人员如何使电动汽车充电器能够与移动应用程序通信开发人员如何使电动汽车充电器能够与移动应用程序通信开发人员如何使电动汽车充电器能够与移动应用程序通信

    在电动汽车 (ev) 世界中,电动汽车驾驶员最神奇的体验之一就是在移动应用程序上点击“开始”并看到充电器开始工作。 但是这个魔法是如何发生的呢? 让我们深入了解电动汽车充电器和移动应用程序如何通信的幕后旅程。 游戏中的玩家 移动应用程序:这是用户发起操作的地方,例如开始或停止充电会话。后端服务器:操…

    2025年12月19日 • 用户投稿
    100
  • 如何在 5 年内成为一名 Javascript 开发人员

    在 2025 年成为一名 javascript 开发人员需要掌握该语言、跟上不断发展的趋势以及构建现实世界的经验。这是分步指南: 第 1 步:学习基础知识了解编程基础知识:从变量、数据类型、循环、函数和数组等核心概念开始。学习 JavaScript 基础知识:专注于 ES6 功能(例如箭头函数、模板…

    用户投稿 2025年12月19日
    100
  • 云通话

    将您的商务电话系统迁移到云端是一项战略举措,可以带来众多好处。传统电话系统成本高昂、不灵活且难以维护。通过切换到基于云的解决方案,企业可以节省成本、提高灵活性并提高效率。 云电话系统最显着的优势之一就是成本效益。与需要昂贵的硬件和维护的传统系统不同,基于云的解决方案以订阅模式运行。这意味着企业只需支…

    用户投稿 2025年12月19日
    100
  • 了解 Protocol Buffers:JSON 的快速替代方案

    在数据交换领域,json(javascript 对象表示法)一直是人们的最爱。它简单、易读,并且可以跨平台无缝运行。对于许多用例来说,json 已经“足够好”。但随着系统规模的扩大以及对速度和效率的需求的增加,json 基于文本的格式可能会成为瓶颈。 这就是 protocol buffers (pr…

    2025年12月19日
    300
  • JavaScript:学习编码基础知识

    JavaScript:学习编码基础知识JavaScript:学习编码基础知识JavaScript:学习编码基础知识JavaScript:学习编码基础知识

    javascript 是一种强大且多功能的编程语言,对于现代 web 开发至关重要。它最初是为了使网页具有交互性而设计的,现在已经发展成为与 html 和 css 并列的 web 核心组件。如今,javascript 不仅运行在浏览器中,还运行在服务器、移动设备甚至机器人上。 1。什么是 JavaS…

    2025年12月19日 • 用户投稿
    100
  • 探索 Nodejs 性能提升和令人兴奋的新功能

    Web 开发世界在不断发展,而 Node.js 早于这个快速变化的领域。作为当今 Web 应用程序的核心技术之一,Node.js 随着每次新的更新而进步,Node.js 22 尤其引人注目,因为它带来了每个开发人员都渴望发现的许多强大的新功能和增强功能。这些更新为每个企业带来了突破性的功能,旨在实现…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信