开启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,到这里就是咱们今天要补充的一些前端基础知识啦,本期的内容就这么多了,下期再会!

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

相关推荐
恋猫de小郭9 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅15 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606116 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了16 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅16 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅16 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅17 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment17 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅17 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊17 小时前
jwt介绍
前端