React Native 最佳实践

news/2024/9/21 15:39:09/文章来源:https://www.cnblogs.com/aow054/p/18424076
如果您是 react native 开发者初学者,或者有经验,那么您必须意识到代码实践是一项不容妥协的技能。作为开发人员,项目的交付是必须的,但编写可扩展且高质量的代码将对您和您的团队的未来有所帮助。在我们继续之前,这些实践可以在 react native cli 或 expo 项目上使用。从 2024 年开始,rn 团队表示,expo 将成为构建 react native 项目的官方框架。 在这篇博客中,我们将学习 react native 项目的代码实践。请记住,一个好的项目是以下方面的平衡:可扩展一致性可维护可读性阅读我的博客,了解如何作为 reactjs 开发人员开始使用 react native 开发人员 1、项目结构开发人员的首要任务是拥有可维护、可读且可扩展的代码库。您的项目结构也将对未来的开发人员有所帮助。有了 expo,人们就有了项目的结构,但作为一名 react native 开发者,你应该根据你的项目来规划你的项目结构:my-app/├── assets/│ ├── fonts/│ ├── images/│ └── icons/├── components/│ ├── button.js│ ├── button.styles.js│ └── header.js├── screens/│ ├── homescreen/│ │ ├── homescreen.js│ │ └── homescreen.styles.js│ └── profilescreen/│ ├── profilescreen.js│ └── profilescreen.styles.js├── navigation/│ ├── appnavigator.js│ ├── authnavigator.js│ └── mainnavigator.js├── redux/ (or store/ if using zustand, mobx, etc.)│ ├── actions/│ ├── reducers/│ ├── store.js│ └── types.js├── services/│ ├── api.js│ └── auth.js├── utils/│ ├── helpers.js│ └── constants.js├── app.js├── package.json├── .babelrc└── readme.md登录后复制 2.导入别名长导入路径会使您的代码更难以阅读和维护。不要编写像 ../../../components/button 这样的长相对路径,而是使用别名来缩短它们并使代码更具可读性。import button from 'components/ui/button';import header from 'components/layout/header';登录后复制 3.进口订单要自动管理导入的顺序,您可以使用一个为您处理此问题的插件来配置 babel。这可以保持您的导入清洁并减少人工干预。npm install --save-dev babel-plugin-module-resolver登录后复制 4.打字稿在 typescript (ts) 和 javascript (js) 之间进行选择时几乎没有争议,特别是对于大型应用程序。 typescript 提供静态类型检查,有助于在编译时而不是运行时捕获错误,从而生成更可靠和可维护的代码。 5. 风格可以通过多种方式设计 rn 项目。可以使用 nativewind 或 react native 的样式。面对如此多的选择,我们应该追求一致性、可扩展性和可维护性。在这里阅读我关于造型的博客1。内联:对于大型项目来说根本不是一个好方法。<view style="{{" backgroundcolor: padding:><text style="{{" color:>hello</text></view>登录后复制2。 stylesheet api: 很好,但是样式不能重用import { stylesheet, view, text } from 'react-native';const styles = stylesheet.create({ container: { backgroundcolor: 'blue', padding: 10, }, text: { color: 'white', },});const app = () =&gt; ( <view style="{styles.container}"><text style="{styles.text}">hello</text></view>);登录后复制3。单独的样式:这是我在大型项目中更喜欢的样式方式。创建一个单独的 style.js 并在您需要的组件中使用它。/components ├── mycomponent.js ├── mycomponent.styles.js/app.js登录后复制// mycomponent.styles.jsimport { stylesheet } from 'react-native';export default stylesheet.create({ container: { flex: 1, justifycontent: 'center', alignitems: 'center', backgroundcolor: '#f5f5f5', }, title: { fontsize: 24, fontweight: 'bold', color: '#333', marginbottom: 20, }, button: { backgroundcolor: '#007bff', paddingvertical: 10, paddinghorizontal: 20, borderradius: 5, }, buttontext: { color: '#fff', fontsize: 16, fontweight: '600', },});登录后复制// mycomponent.jsimport react from 'react';import { view, text, pressable } from 'react-native';import styles from './mycomponent.styles';const mycomponent = () =&gt; { return ( <view style="{styles.container}"><text style="{styles.title}">hello from mycomponent</text><pressable style="{styles.button}"><text style="{styles.buttontext}">click me</text></pressable></view> );};export default mycomponent;登录后复制4。样式化组件:大型项目的另一种首选方式。import styled from 'styled-components/native';const container = styled.view` background-color: blue; padding: 10px;`;const styledtext = styled.text` color: white;`;const app = () =&gt; ( <container><styledtext>hello</styledtext></container>);登录后复制5。原生风: nativewind 是设计应用程序风格的好方法。安装原生 wind 后,您可以使用这些类来设计您的应用程序。这样您就可以委托造型工作。import react from 'react';import { view, text, pressable } from 'react-native';import { styled } from 'nativewind';const app = () =&gt; { return ( <view classname="flex-1 justify-center items-center bg-gray-100"><text classname="text-2xl font-bold text-blue-500 mb-4"> welcome to nativewind! </text><pressable classname="bg-blue-500 px-4 py-2 rounded"><text classname="text-white font-semibold">press me</text></pressable></view> );};export default app;登录后复制 6.道具props 用于 react native 中组件之间的通信,允许数据从父组件流向子组件。就像样式一样,管理道具的方法也有多种。一致性是关键,因此建议在整个项目中坚持使用一种方法。此外,始终解构 props 以获得更清晰、更易读的代码。解构不仅提高了可读性,还可以更轻松地发现组件正在使用哪些 props。const mycomponent = ({ title, subtitle }) =&gt; { return ( <view><text>{title}</text><text>{subtitle}</text></view> );};登录后复制 7. 状态管理高效的状态管理可确保应用程序随着代码库的增长而保持高性能和可管理性。如今,我们有很多选择来选择最好的状态管理人员。 a.更喜欢本地状态而不是全局状态b.使用 context api 实现简单状态c.使用状态管理库处理复杂状态d.不可变状态更新e.更喜欢 redux 工具包而不是 reduximport { createslice } from '@reduxjs/toolkit';const booksslice = createslice({ name: 'books', initialstate: [], reducers: { addbook: (state, action) =&gt; { state.push(action.payload); }, removebook: (state, action) =&gt; { return state.filter(book =&gt; book.id !== action.payload); }, },});export const { addbook, removebook } = booksslice.actions;export default booksslice.reducer;登录后复制 8. 崩溃分析为了确保应用程序的健康并减少崩溃,实施崩溃分析和错误跟踪非常重要:a。使用崩溃分析工具:实施 firebase crashlytics 或 sentry 等服务b。测试您的应用程序的稳定性运行自动化测试和手动压力测试以捕获边缘情况崩溃。利用 testflight 或 google play beta 测试等服务。您可以跟踪本机崩溃(ios/android)和 javascript 错误。使用 errorboundary 捕获 javascript 错误并将其记录到崩溃分析服务。c.跟踪 js 和本机错误import react from 'react';import * as sentry from '@sentry/react-native';class errorboundary extends react.component { componentdidcatch(error, errorinfo) { sentry.captureexception(error, { extra: errorinfo }); } render() { if (this.state.haserror) { return <text>something went wrong.</text>; } return this.props.children; }}登录后复制 9. 日志记录日志记录有助于跟踪应用行为、调试问题和收集分析。a。使用日志框架react native logger:专为 react native 设计的易于使用的记录器。winston:一个可以与 react native 和 node.js 一起使用的多传输日志库。import logger from 'react-native-logger';logger.log('This is a debug log');logger.warn('This is a warning log');logger.error('This is an error log');登录后复制b。区分日志级别使用适当的日志级别,例如调试、信息、警告和错误。在生产中,通过仅允许错误和警告日志来最大程度地减少日志记录的冗长性,而在开发模式下,请使用调试和信息。c.远程记录考虑将日志发送到远程日志服务,例如:纸迹洛格利firebase analyticsd.仔细记录敏感信息避免记录敏感的用户信息,例如密码、令牌或个人数据。 10. 测试每个项目的测试都至关重要。作为开发商,质量是开发商的责任。在 react native 世界里有:单元测试集成测试端到端测试至少要花时间进行端到端测试。有很多工具可用于测试。快乐学习!! 以上就是React Native 最佳实践的详细内容,更多请关注我的其它相关文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801035.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx: 按ip地址限流

一,以固定的速度提供服务 语法: 例子 limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;server { location / { limit_req zone=test; }} 语法: imit_req_zone 用于设置限流和共享内存区域的参数,格式为: limit_req_zone key zone rate。 key: 定…

Free5GC源码研究(2) - 单个NF的软件架构

前文我们总览了free5gc的总体软件架构。整一个free5gc系统又由几个NF(Network Function)组成,所以本文继续深入研究单个NF的软件架构。要研究NF的软件架构,最直接的方式是找一个简单的NF来回观摩。free5gc/ausf算是比较简单的一个,然而我发现了一个更简单的NF,叫做andy89…

一,初始 MyBatis-Plus

一,初始 MyBatis-Plus @目录一,初始 MyBatis-Plus1. MyBatis-Plus 的概述2. 入门配置第一个 MyBatis-Plus 案例3. 补充说明:3.1 通用 Mapper 接口介绍3.1.1 Mapper 接口的 “增删改查”3.1.1.1 查询所有记录3.1.1.2 插入一条数据3.1.1.3 删除一条数据3.1.1.4 更新一条数据3.…

[神经网络与深度学习笔记]LDA降维

LDA降维 LinearDiscriminant Analysis 线性判别分析,是一种有监督的线性降维算法。与PCA保持数据信息不同,LDA的目标是将原始数据投影到低维空间,尽量使同一类的数据聚集,不同类的数据尽可能分散 步骤:计算类内散度矩阵\(S_b\) 计算类间散度矩阵\(S_w\) 计算矩阵\(S_w^{-1…

C++ 指针和迭代器支持的操作

▲ 《C++ Primer》 P96 指针也都支持上面的操作。

代码整洁之道--读书笔记(14)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…

hexo安装后报错hexo 不是内部或外部命令,也不是可运行的程序 或批处理文件。

hexo问题 之前利用hexo和gitee搭建了一个博客,但是最近gitee的gitpage停止服务了,便想着在github上搭建一个。 在到安装hexo这一步的时候,一直报错hexo 不是内部或外部命令,也不是可运行的程序 或批处理文件。 我的所有安装步骤和环境变量发现都没有错,反复配置后去找了一…

跑冒滴漏监测系统

跑冒滴漏监测系统应用计算机视觉和深度学习技术对危化品生产区域实时检测,当检测到液体泄露时,立即抓拍存档告警并回传给后台监控平台方便人员及时处理,提高图像数据的实时监控效率。跑冒滴漏监测系统7*24小时不间断对监控画面实时分析监测,避免意外事故发生,同时降低人力…

学校食堂明厨亮灶监控系统

学校食堂明厨亮灶监控系统通过卷积神经网络学习与图像识别技术,学校食堂明厨亮灶监控系统将对现场监控画面进行24小时实时分析,如:厨房出现老鼠狗猫、厨师未戴口罩、厨师未戴厨师帽、厨师服穿戴识别、抽烟识别、玩手机识别,同时实时抓拍相关情况,全程记录留痕,提升监管效…

河道采砂识别监测系统

河道采砂识别监测系统借助深度视觉边缘分析技术,自动对监控区域违法采砂进行实时监测。如果河道采砂识别监测系统监测到有人违法采砂时,立即抓拍存档预警,将违规采砂截图发给后台管理中心,提醒后台人员及时处理。河道采砂识别监测系统可根据时间段违规记录、视频进行查找,…

煤炭传送带状态检测系统

煤炭传送带状态检测系统通过机器视觉+边缘分析技术对煤炭皮带状况进行实时监测,一旦煤炭传送带状态检测系统监测到皮带跑偏、堆煤、撕裂、异物等其他情况,煤炭传送带状态检测系统马上开展警报提醒,通知后台监控平台,并提醒相关人员及时处置。煤炭传送带状态检测系统同时把告…

城市道路积水识别监测系统

城市道路积水识别监测系统基于机器视觉分析,城市道路积水识别监测系统实时识别街道路面积水情况,对严重积水时立即报警。城市道路积水识别监测系统对低洼区域进行实时监测,一旦城市道路积水识别监测系统监测到街道路面积水时,立即进行抓拍告警,告知监控管理中心,提醒相关…