从零开始学React-coderwhy React课程笔记(一)

第一天: 邂逅React-React的特点-React组件化开发方式

学习React的必要性

React 是前端必须掌握的一个JavaScript框架

在前端职业发展的过程中,不要给自己设限,不要仅仅将自己局限在某一个框架或者技术中

学习React的前置知识

  • JavaScript

    React本身对JavaScript要求较高,可以说写React就是在写JS

  • ES6

    需要掌握一些高级的JavaScript语法

React介绍

React 是用于构建用户界面的JavaScript库

React 的特点:

  1. 声明式编程
    • 允许我们只需要维护自己的状态,当状态改变时,React可以根据最新的状态渲染我们的UI界面
  2. 组件化开发
    • 将复杂的界面拆分为一个个小的组件
    • 如何合理地进行组件的划分和设计
  3. 多平台适配
    • React Native 开发移动端项目

React的开发依赖

  • react: 包含React所必须的核心代码

  • react-dom: React渲染在不同平台所需要的核心代码

  • babel: 将JSX转换成React代码的工具

使用 React 类组件写一个小案例

案例说明:默认页面展示 Hello World,点击按钮后展示Hello React

1.引入相关的依赖

暂时使用 CDN 进行引入

html 复制代码
<script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script> 
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script> 
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

2.编写一个类组件

相关知识点如下图,coderwhy 老师已经总结得很详细了。

这里我们跟着 coderwhy 老师一步一步来,先写一个类组件渲染出 Hello world

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>你好,React</title>
</head>

<body>
    <div id="root"></div>
    <!-- 引入依赖 -->
    <script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

    <script type="text/babel">

      // 定义一个类组件
      class App extends React.Component {
        
        // 构造函数
        constructor() {
            super();
            this.state = {
                message: "Hello World"
            };
        }

        render() {
          // 返回需要渲染的 JSX 内容,最好用()包一下
          return(<div>{this.state.message}</div>);
        }
      }
      // 渲染根组件
      const root = ReactDOM.createRoot(document.querySelector("#root"));
      root.render(<App />);
    </script>
</body>

</html>

3.写组件数据与组件方法

组件数据 可以分为两类:参与界面更新的数据和不参与界面更新的数据。参与界面更新的数据我们也可以称之为是参与数据流 ,这个数据是定义在当前对象的state中。

对于类组件而言,在构造函数的 this.state 里面定义。如何修改这个 state :使用 React 提供的一个 setState 方法

组件方法 :对于类组件而言,写在 render() 的外层,即实例方法。我们定义一个方法,点击按钮的时候调用这个方法,修改 message 的值。

javascript 复制代码
btnClick(){
    this.setState({
        message: "Hello React",
    });
}

render() {
  // 返回需要渲染的 JSX 内容,最好用()包一下
  return(
    <div>
        {this.state.message}
        <button onClick={this.btnClick}>按钮</button>
    </div>
    );
}

但是像上面这么写会遇到一个问题:btnClick 里边的 this 的值是 undefined

原因在于:

  1. this.btnClick 这个函数传递给点击事件回调函数 onClick,但在onClick里边进行回调时,并没有指定调用的对象
  2. 正常情况下,btnClick 函数里面的 this 默认会指向 window,即顶级作用域的 this
  3. 但这里我们使用了 Babel,Babel 假设所有输入的代码都是 ES6。ES6 模块默认是严格模式(strict mode)
  4. 在严格模式下,浏览器的顶级作用域的 this 不是 window,而是 undefined

coderwhy 老师说这是学习 React 会遇到的第一个难点,确实,如果对 this 指向概念不熟悉的话碰到会有点懵

那么,应该如何解决这个问题呢?可以利用 bind 方法将组件对象绑定到 btnClick 函数上:

html 复制代码
<button onClick={this.btnClick.bind(this)}>按钮</button>

第一天:邂逅React完

相关推荐
GuWenyue15 分钟前
不用第三方SDK!Vue3原生Fetch实现DeepSeek流式输出,90%前端都会踩的分片解析坑一次性解决
前端·人工智能·llm
独隅17 分钟前
前端离线暂停更新策略:Service Worker 与 PWA 实战指南
前端
不如摸鱼去44 分钟前
Wot UI 2.3.0 发布:二维码组件来了,Open Wot 与 wot-starter 同步更新
前端·ui·微信小程序·前端框架·uni-app
Cloud_bread1 小时前
从ReAct到自主闭环:Agentic Coding核心执行引擎的技术演进
前端·react.js·前端框架
cidy_981 小时前
OptMem 使用教程
前端
杉氧1 小时前
用 Compose 挑战交互与动效天花板:ComposeCraftLab 开源实验室全解析
android·前端·kotlin
Canace2 小时前
AI 生成到 90% 突然断了:你的解决方案是?
前端·人工智能
TinssonTai2 小时前
Vite 8 版 Chrome 插件全家桶,popup/options/sidepanel 一次集齐
前端·vue.js
玉鸯2 小时前
让 Agent 面向用户:AG-UI 协议构建 Agent 前端
前端·python·agent
程序员黑豆2 小时前
鸿蒙应用开发 @Extend 装饰器使用教程
前端·harmonyos