React 18.2.0入门教程(二)

前言

在工程化项目里,我们一般不会直接引入脚本文件,主要原因是后续开发新功能容易耦合在一个页面内,当多个页面开发时,每一个页面都需要引入一次,既不方便管理和维护也容易产生代码冗余,降低运行效率。因此,react提供了react脚手架来帮助我们解决这个问题

Create React App

Create React App命令会为你创建一个新的react App,同时它也会配置好你的开发环境,以便使你能够使用最新的 JavaScript 特性,提供良好的开发体验,并为生产环境优化你的应用程序。你需要在你的机器上安装 Node >= 14.0.0 和 npm >= 5.6。要创建项目,请执行:

npx create-react-app my-app    // my-app 为自定义项目名
cd my-app    // 需要进入创建好的项目文件夹中
npm start    // 启动项目
注意
第一行的 npx 不是拼写错误 —— 它是 npm 5.2+ 附带的 package 运行工具

这里官方使用npx命令是为了简单直接,以便于初学者快速创建一个react应用。npx的作用在于可以直接在任意目录下执行包内的命令。举个例子,如果我们想要在项目中使用typescript,那么通常情况下需要使用npm / yarn 全局安装typescript的脚本包,因为当你需要使用tsc命令编译ts文件时,如果不是全局安装而使用的情况下的话cmd会报:”不是内部或外部命令,也不是可执行的程序或批处理文件“的错误,因为全局环境下确实找不到相关命令

Hello World

进行到了这一步后,我们就可以随心所欲来构建我们的react应用了。当然,最开始的还要属最经典的hello world 程序,可以帮助我们了解到一个最基本的react应用的基本编写方式

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<h1>Hello, world!</h1>);

找到脚手架生成的index.js文件,将root.render函数内的内容改为hello word 就可以了。注意,App.js是react应用中的主组件,类似于vue中的App.vue,index.js则是react中的入口文件,类似于vue中的main.js

在index.js 文件中应该会看到一个名为React.StrictMode的标签包括着App组件。意为被该标签包括着的组件会开启严格模式,StrictMode 目前有助于:

还有一个新加入的名称是reportWebVitals,这个是用于采集当前react应用的性能的一个文件,其中也会导出一个同名函数用于执行内部收集的函数,大多数情况下可以忽略

因为目前我们暂不涉及自定义组件或其它高阶用法,因此,可以先把App.js和index.js的内容全部删掉,然后自己来编写新的代码,这样做有利于提高我们的实践能力

元素渲染

之前我们已经提到过,jsx可以看作是去掉了反引号的模板字符串,当然,具体语法还是会有些许差别的。那么,jsx自然也可以做到模板字符串能够做到的事情,比如嵌入js变量或表达式。以下是react官方的示例代码

const root = ReactDOM.createRoot(
  document.getElementById('root')
);

function tick() {
  const element = (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
  root.render(element);
}

setInterval(tick, 1000);

注:在脚手架的public目录内的index.html内有id名为root的div元素,后续的内容其实都是在这个页面内修改而成的,因此,react和vue一样都是单页面应用

这个例子会在 setInterval() 回调函数,每秒都调用 root.render()

可能你会担心这样频繁更新页面太耗费性能了,其实这完全不用担心,React 只更新它需要更新的部分

React DOM 会将元素和它的子元素与它们之前的状态进行比较,并只会进行必要的更新来使 DOM 达到预期的状态

尽管每一秒我们都会新建一个描述整个 UI 树的元素,React DOM 只会更新实际改变了的内容,也就是例子中的文本节点
根据我们的经验,应该专注于 UI 在任意给定时刻的状态,而不是一视同仁地随着时间修改整个界面

组件 & Props

在React 18.2.0入门教程(一)中我们曾涉及过一点组件的知识,但是不多。在这节,我们将在脚手架内实际编写一个组件,并逐渐熟悉其工作方式,以下是react官方给出的实例

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

const root = ReactDOM.createRoot(document.getElementById('root'));
const element = <Welcome name="Sara" />;
root.render(element);

这个实例最重要的是理解props参数,让我们来回顾一下这个例子中发生了什么:

  1. 我们调用 root.render() 函数,并传入 <Welcome name="Sara" /> 作为参数

  1. React 调用 Welcome 组件,并将 {name: 'Sara'} 作为 props 传入

  1. Welcome 组件将 <h1>Hello, Sara</h1> 元素作为返回值

  1. React DOM 将 DOM 高效地更新为 <h1>Hello, Sara</h1>

注:所有 React 组件都必须保护它们的 props 不被更改

注意: 组件名称必须以大写字母开头
React 会将以小写字母开头的组件视为原生 DOM 标签。例如,<div /> 代表 HTML 的 div 标签,而 <Welcome /> 则代表一个组件,并且需在作用域内使用 Welcome
你可以在 深入 JSX 中了解更多关于此规范的原因

分解再组合组件

当组件开发的过程中,往往随着需求增加或变更的同时,代码行数越来越多,关系和层级也越来越复杂,往往带给开发者难以释怀的开发困难。因此,建议各位开发者将不同逻辑部分的组件内容抽离出来,每一份分割成单独的小组件后,再将其组装到原来的大组件内,这种方式可以很好的提高代码的可读性和可复用性,后续无论是调试还是维护都会很方便,能够极大提高开发者的开发效率

尾声

每一次的分享篇幅都会控制不要太长,这样的话我想大家应该能够看得下去,不至于一下子就放弃了

如果喜欢这个系列,还望能够关注我或订阅这个专栏,感谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值