开启RN之旅——前端基础

目录

前言

一、了解ES6的常用方法

1.1、什么事ES5、ES6?

1.2、变量声明

1.3、对象属性简写

1.4、Object.assign

1.5、解构赋值

1.6、展开运算符

1.7、模板字符串

1.8、Promise

1.9、import和export

二、了解babel

2.1、什么是babel

2.2、初步了解babel配置

三、CSS-flex布局基础

3.1、css-flex布局介绍

3.2、css-flex布局示例

四、npm

4.1、npm是什么

4.2、检索npm库

4.3、安装和卸载

五、使用nrm管理npm源


前言

由于咱们之前是做移动端开发的,所以在正式开始学习RN之前,咱们花点时间简单了解一下前端的一些基础知识,方便后续的学习。

一、了解ES6的常用方法

1.1、什么事ES5、ES6?

ES5全称ECMAScript5,是ECMAScripts的第五次修订,又称ECMAScript2009, 于 2009 年完成标准化。

ES6全称 ECMAScript6.0,是ECMAScripts的第六次修订,又称 ES2015,于2015年06 月发版,是 JavaScript 的下一个版本标准。

1.2、变量声明

  • var:存在变量提升问题,允许先使用后声明,未定义时返回undefined。破坏作用域规则,导致代码的可读性降低
  • let:ES6引入,必须先声明后使用,无变量提升
  • const:ES6引入,声明后不可重新赋值,必须初始化。与let的区别是,let允许重新赋值,const为常量

1.3、对象属性简写

ES6对象属性简写规则:当属性名与变量名相同时,可省略冒号及值(如const user = {name}等价于{name: name},如下图所示:

1.4、Object.assign

Object.assign的作用:合并多个对象(如Object.assign({}, o1, o2)将o1和o2的属性合并到新对象)

如下图所示:

1.5、解构赋值

解构赋值功能:从对象或数组中提取值并赋值给变量

基本语法:通过const {name, age} = user直接从对象user中提取属性

如下图所示:

1.6、展开运算符

{ ...obj }语法可展开对象属性,通过它与解构合并可以实现类似Object.assign的功能,比如:const user = {...userName, ...age},如下图所示:

1.7、模板字符串

  • 使用反引号包裹,支持嵌入变量(如name=${user.name})
  • 优势:简化字符串拼接,提升可读性

举个栗子🌰吧:

1.8、Promise

Promise的核心机制:

  • resolve:处理异步成功结果(通过.then()接收)
  • reject:处理异步失败结果(通过.catch()捕获)

这里咱们还是举个例子吧:定义一个check()函数,当check(true)时触发resolve返回"success",当check(false)时触发reject返回"error",如下图所示:

更多详情可以参考:JavaScript Promise

1.9、import和export

import和export是ES6提供的模块化语法,用于实现代码模块间的引用与共享。

在demo工程的index.js文件中,通过import App from './App'语句导入App模块。./表示当前目录,因此该语句表示从同级目录下的App文件导入内容。

App文件中使用export关键字导出了一个App组件,该组件可在index.js中通过import引入。

虽然这里使用的是TypeScript,咱们先不管,先了解一些JS基础,后面再了解TS就小菜一碟了。

ES6是JavaScript语言的重要里程碑,其规范完善了语言特性,显著提升了开发效率,因此掌握ES6语法对前端开发来说是至关重要的。

二、了解babel

2.1、什么是babel

Babel是JavaScript编译器,编译过程包含解析、转换和打印输出三个核心环节。

①、babel是一个工具链

Babel作为工具链,主要功能是将ES6+代码及React JSX语法转换为向后兼容的JavaScript语法,解决新旧版本兼容性问题。

②、为什么需要babel?

  • 浏览器兼容性问题:JavaScript新特性发布后,浏览器支持存在滞后性
  • 开发效率需求:通过Babel将新语法实时转换为旧语法,确保代码在未支持新特性的浏览器中正常运行
  • 本质功能:Babel是语法翻译器,实现高版本语法向低版本的降级转换

2.2、初步了解babel配置

打开Demo工程的bable.config.js文件,如下所示:

比如这里用到了一个reactnative的预设,预设就是把很多的配置打成了包,只需要引用这个包,就可以引用这个包里面所包含的所有的配置。

Babel配置通过预设(presets)和插件(plugins)实现功能扩展,预设包含预定义配置集合,插件用于补充自定义需求。

babel配置实例:

|---------|----------------------------|-------------|
| 配置项 | 功能说明 | 应用场景 |
| presets | 预定义配置包(如@babel/preset-env) | 快速启用标准语法转换 |
| plugins | 扩展自定义功能(如模块路径解析) | 处理特定语法或优化场景 |
| env配置 | 按环境差异化配置(如生产环境关闭console输出) | 环境适配与性能优化 |

三、CSS-flex布局基础

更多详情可以参考:弹性盒子

3.1、css-flex布局介绍

  • direction属性:定义布局方向为横向(row)或纵向(column)。横向布局时子元素从左到右排列,纵向布局时从上到下排列。
  • 主轴与交叉轴对齐:横向布局中水平方向为主轴,垂直方向为交叉轴;纵向布局中垂直方向为主轴,水平方向为交叉轴。对齐方式通过justify-content(主轴)和align-items(交叉轴)控制。
  • flex-grow与flex-shrink属性:
    • flex-grow:当父元素宽度大于子元素总和时,按比例分配剩余空间。
    • flex-shrink:当子元素总和超过父元素宽度时,按比例压缩子元素。

3.2、css-flex布局示例

①、flex-direction属性值

  • row:横向排列(默认)。
  • column:纵向排列。
  • row-reverse/column-reverse:反向排列。

下面通过代码来实际体验一下,设置flex-direction: row时,子元素水平排列;改为column后变为垂直排列,通过margin调整间距可直观观察布局变化。咱们打开Demo工程的App.tsx文件,在终端通过npm run android启动项目,然后修改代码:

TypeScript 复制代码
import { StatusBar, StyleSheet, useColorScheme, View } from 'react-native';
import { SafeAreaProvider } from 'react-native-safe-area-context';

function App() {
  const isDarkMode = useColorScheme() === 'dark';

  return (
    <SafeAreaProvider>
      <StatusBar barStyle={isDarkMode ? 'light-content' : 'dark-content'} />
      <View style={styles.container}>
        <View style={styles.child} />
        <View style={styles.child} />
        <View style={styles.child} />
      </View>
    </SafeAreaProvider>
  );
}

const styles = StyleSheet.create({
  container: {
    display: 'flex',
    flexDirection: 'row',
    marginTop: 50,
  },
  child: {
    width: 60,
    height: 60,
    backgroundColor: 'red',
    marginRight: 10,
  },
});

然后保存回到模拟器中查看效果:

如果把上面代码中的flexDirection的值修改为column,则效果如下:

②、主轴和交叉轴对齐

  • 横向布局(row)中,水平方向为主轴,垂直方向为交叉轴。
  • 纵向布局(column)中,垂直方向为主轴,水平方向为交叉轴。
  • justify-content: center:主轴居中。
  • align-items: center:交叉轴居中。

举个栗子:不同尺寸子元素通过对齐属性实现垂直或水平居中。

TypeScript 复制代码
function App() {
  const isDarkMode = useColorScheme() === 'dark';

  return (
    <SafeAreaProvider>
      <StatusBar barStyle={isDarkMode ? 'light-content' : 'dark-content'} />
      <View style={styles.container}>
        <View style={styles.child1} />
        <View style={styles.child2} />
        <View style={styles.child3} />
      </View>
    </SafeAreaProvider>
  );
}

const styles = StyleSheet.create({
  container: {
    width: '100%',
    display: 'flex',
    flexDirection: 'row',
    justifyContent: 'center',
    alignItems: 'center',
    marginTop: 50,
  },
  child1: {
    width: 30,
    height: 30,
    backgroundColor: 'red',
    marginRight: 10,
  },
  child2: {
    width: 60,
    height: 60,
    backgroundColor: 'red',
    marginRight: 10,
  },
  child3: {
    width: 90,
    height: 90,
    backgroundColor: 'red',
    marginRight: 10,
  },
});

这里咱们是让整体的宽度填充整个屏幕,方向是row就是横向,那么主轴就是横向,交叉轴就是纵向,这里让子元素在水平和垂直方向上都居中,效果如下:

③、元素的放大和缩小

  • flex-grow:父元素剩余空间按子元素的flex-grow值分配(未定义则为0)。
  • 示例:三子元素均设为1时等分剩余空间;若仅一个元素为1,则独占剩余空间。

在上面第②个示例代码的基础上,对child2元素的样式做如下修改,添加一个flex-grow属性:

TypeScript 复制代码
child2: {
    width: 60,
    height: 60,
    backgroundColor: 'red',
    marginRight: 10,
    flexGrow: 1,
  },

效果变成了这样:

对于flexShrink它的作用则是相反的,如果子元素超出了父布局的宽度,就根据flexShrink的值进行压缩,同样的举个例子吧:

咱们先修改上面三个子元素的宽度让它超出父布局的宽度,代码如下:

TypeScript 复制代码
child1: {
    width: 100,
    height: 100,
    backgroundColor: 'red',
    marginRight: 10,
  },
  child2: {
    width: 150,
    height: 150,
    backgroundColor: 'red',
    marginRight: 10,
  },
  child3: {
    width: 200,
    height: 200,
    backgroundColor: 'red',
    marginRight: 10,
  },

然后给child2添加flexShrink属性:

TypeScript 复制代码
child2: {
    width: 150,
    height: 150,
    backgroundColor: 'red',
    marginRight: 10,
    flexShrink: 1,
  },

那么效果则变成了这样的:

即是:1和3不变,2减肥。

四、npm

4.1、npm是什么

npm的全称为Node Package Manager,是Node.js的包管理工具。其功能类似于Android开发中通过Gradle获取远程库的方式,区别在于Gradle的库存储在Maven或者Jetpack等平台,而npm的库统一存储在npm官方平台。npm的官方域名为npmjs.com,所有第三方库均托管于此。

4.2、检索npm库

打开https://www.npmjs.com/,在搜索框中输入需要查找的库的名称回车即可查看库的详细信息,比如,可以搜索dayjs,如图所示:

4.3、安装和卸载

通过package.json文件的dependencies或devDependencies里面的字段确认当前依赖。

安装:执行命令 npm install [库名]

卸载:执行命令 npm uninstall [库名]

五、使用nrm管理npm源

nrm是用于管理npm源的工具。npm官方源访问速度较慢时,可通过镜像源(如淘宝源)解决。npm本身支持源管理,但命令复杂,因此推荐使用nrm简化操作。

①、安装nrm

安装命令为npm install -g nrm,其中install可简写为i,-g表示全局安装。

②、查看所有npm源

通过nrm ls命令可查看现有npm源列表,包括官方源、cnpm、腾讯源、淘宝源等。

③、添加淘宝源

若需添加淘宝源,执行nrm add taobao [淘宝源URL],将淘宝源URL替换为实际镜像地址即可完成添加。

④、测试淘宝源

测试命令nrm test taobao会返回连接延迟,例如100毫秒表示连接通畅,此时可安全切换至该源。

⑤、使用淘宝源

切换至淘宝源需执行nrm use taobao

OK,到这里就是咱们今天要补充的一些前端基础知识啦,本期的内容就这么多了,下期再会!

祝:学习进步,工作顺利!

相关推荐
程序猿小蒜2 小时前
基于springboot的校园社团信息管理系统开发与设计
java·前端·spring boot·后端·spring
申阳2 小时前
Day 4:02. 基于Nuxt开发博客项目-整合 Inspira UI
前端·后端·程序员
程序猿_极客2 小时前
【期末网页设计作业】HTML+CSS+JavaScript 猫咪主题网站开发(附源码与效果演示)
前端·css·html·课程设计·网页设计作业
IT古董2 小时前
【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI 完整实战教程-第1章:项目概述与技术栈介绍
前端·react.js·前端框架
有点笨的蛋2 小时前
从零搭建小程序首页:新手也能看懂的结构解析与实战指南
前端·微信小程序
爱宇阳2 小时前
Vue3 前端项目 Docker 容器化部署教程
前端·docker·容器
Irene19912 小时前
前端缓存技术和使用场景
前端·缓存
BetterChinglish3 小时前
html5中canvas图形变换transform、setTransform原理(变换矩阵)
javascript·html5·canvas·变换矩阵
是你的小橘呀3 小时前
深入解析 JavaScript 引擎与作用域机制
前端·javascript