说一说React与脚手架

一、React主要做什么       

        React 是一个用于构建用户界面(UI)的 JavaScript 库,用户界面(UI)是由按钮、文本和图像等小单元内容构建而成,如果用表示函数的符号 f(x) 来表示React,可以用以下表达式来描述React与用户界面的关系:

  • 组件化的开发思路:提供完整的组件规范,然后借助组件快速的搭出一个页面
  • 数据驱动视图:开发者无需再频繁操作页面上的每个节点,而是通过定义数据模型来驱动整个页面视图
  • 高效的渲染效率:以Fiber对象为核心,一个Element节点在React看来,就是一个Fiber对象,所有的状态都存储在Fiber对象中,通过复杂的计算后,结果输出到View视图上呈现,既符合了数据驱动视图的理念,又引入了异步渲染的机制,提高了浏览器的渲染性能。

二、React的基本概念

1. 组件

  • 定义

    • 组件是 React 应用的基本构建块。它将用户界面拆分成独立的、可复用的部分。
    • 可以使用函数或类来定义组件。函数组件是使用 JavaScript 函数定义的组件,而类组件是使用 ES6 类定义的组件。
     function MyComponent(props) {
       return <div>{props.message}</div>;
     }
  • 结构

    • 组件可以接收输入属性(props)并返回一个 React 元素,描述组件的用户界面。
    • 例如,一个简单React组件可能如下所示:
     class MyComponent extends React.Component {
       render() {
         return <div>{this.props.message}</div>;
       }
     }

2. JSX写法

  • 简介

    • JSX(JavaScript XML)是一种 JavaScript 的语法扩展,主要用于在 React 框架中描述用户界面。
    • JSX 看起来非常像 HTML 或 XML,但实际上它是在 JavaScript 代码中使用的一种语法,允许开发者在 JavaScript 代码中直接编写 HTML 标签,使代码更加直观和易于理解。
     import React from 'react';

     function HelloWorld() {
       const message = 'Hello, React with JSX!';
       return (
         <div>
           <p>{message}</p>
           <button>Click me</button>
         </div>
       );
     }

     export default HelloWorld;
  • 语法

    • JSX 元素由开始标签、结束标签和它们之间的内容组成。
    • JSX 元素可以包含子元素和属性,就像普通的 HTML 标签一样。例如:<div><p>Some text</p><span>Another element</span></div>
    • JSX 可以直接嵌入 JavaScript 表达式,动态地生成内容和设置属性。例如:<div>{variable}</div>,这里的{variable}会被替换为 JavaScript 变量variable的值。
    • JSX 可以调用函数、进行条件判断、循环等操作。
    • 例如:
     const items = [1, 2, 3];
     return (
       <ul>
         {items.map(item => <li key={item}>{item}</li>)}
       </ul>
     );

3. 状态(State)

  • 定义

    • 状态是组件内部的数据,可以被修改。状态的变化会触发组件的重新渲染。
    • 类组件可以通过定义 state 对象来管理状态,函数组件可以使用 React 的 useState 钩子来管理状态。
  • 使用状态

    • 在组件中,可以通过 this.state(类组件)或 state(函数组件)来访问状态的值。
    • 可以使用 this.setState(类组件)或 setState(函数组件)来更新状态的值。
    • 例如:
     class Counter extends React.Component {
       constructor(props) {
         super(props);
         this.state = { count: 0 };
       }

       incrementCount = () => {
         this.setState({ count: this.state.count + 1 });
       };

       render() {
         return (
           <div>
             <p>Count: {this.state.count}</p>
             <button onClick={this.incrementCount}>Increment</button>
           </div>
         );
       }
     }

4. 属性(Props)

  • 定义

    • 属性是从父组件传递给子组件的数据,通常是只读的。
    • 属性可以是任何类型的数据,包括字符串、数字、对象、数组等。
  • 父子组件通信

    • 在父组件中,可以通过标签的属性来传递属性给子组件。
    • 子组件不能直接修改接收到的属性。如果需要修改数据,应该通过父组件传递一个回调函数,让父组件来处理数据的修改。
    • 例如:父组件ParentComponent向子组件ChildComponent传递了两个 props:onButtonClick(一个回调函数)和message(一个字符串)。子组件在按钮被点击时,调用父组件传递过来的回调函数,并传递一些数据给父组件,父组件中的回调函数接收子组件传来的数据并进行处理。
// 父组件ParentComponent
import React from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const handleChildButtonClick = (dataFromChild) => {
    console.log('Data received from child:', dataFromChild);
  };

  return (
    <div>
      <h1>Parent Component</h1>
      <ChildComponent onButtonClick={handleChildButtonClick} message="Message from parent" />
    </div>
  );
}

export default ParentComponent;
// 子组件ChildComponent
import React from 'react';

function ChildComponent(props) {
  const handleButtonClick = () => {
    props.onButtonClick('Data sent from child');
  };

  return (
    <div>
      <h2>Child Component</h2>
      <p>{props.message}</p>
      <button onClick={handleButtonClick}>Send data to parent</button>
    </div>
  );
}

export default ChildComponent;

5、生命周期方法

  • 类组件的生命周期方法

    • 对于类组件,React 提供了一系列的生命周期方法,这些方法在组件的不同阶段被调用。
    • constructor():组件被创建时首先被调用的方法,通常在这个方法中初始化组件的状态和绑定事件处理函数。
    • render():render方法是必须调用的,用于返回一个 React 元素,描述组件的用户界面。
    • componentDidMount():当组件被挂载到 DOM 后被调用,在这里可以进行一些副作用操作,如发起数据请求、设置定时器等。
    • shouldComponentUpdate(nextProps, nextState):当组件接收到新的属性或状态时被调用,它返回一个布尔值,决定组件是否应该重新渲染,如果返回 false,则组件不会重新渲染。
    • componentDidUpdate(prevProps, prevState, snapshot):当在组件更新后被调用,可以在这里进行一些副作用操作,如更新 DOM、发起数据请求等。
    • componentWillUnmount():当组件被卸载之前被调用,可以在这里进行一些清理操作,如清除定时器、取消订阅等。

  • 函数组件与hooks

    • 在 React 16.8 之前,函数组件被称为无状态组件,主要用于展示,不能使用状态(state)和生命周期方法。
    • React hooks是React 16.8的新增特性,支持了在不编写class的情况下使用state以及其他的副作用钩子。
    • useState:用于在函数组件中添加状态,它返回一个包含当前状态值和更新状态值的函数的数组。
    • useEffect:用于处理副作用操作,如数据获取、订阅事件、手动修改 DOM 等,可以在组件挂载、更新和卸载时执行特定的副作用操作。

    • useContext:用于在函数组件中访问 React 的上下文(Context),允许在组件树中共享数据,而无需通过层层传递 props。

    • useReducer:用于处理复杂的状态管理逻辑,类似于 Redux 的 reducer 函数,接受一个 reducer 函数和初始状态作为参数,返回当前状态和一个 dispatch 函数,用于触发状态更新。

    • useCallback:用于缓存函数,避免在每次渲染时都重新创建函数,当函数作为 props 传递给子组件时,如果子组件使用了`React.memo`进行优化,`useCallback`可以避免不必要的子组件重新渲染。

    • useMemo:用于缓存计算结果,避免在每次渲染时都进行重复计算,当计算结果作为 props 传递给子组件时,如果子组件使用了React.memo进行优化,useMemo可以避免不必要的子组件重新渲染。

三、Create React App

        Create React App 是一个由 Facebook 官方推出的快速搭建 React 开发环境的脚手架工具,当使用 Create React App 创建项目时,它会自动配置好 React 所需的开发环境,包括引入 React 库本身以及 React DOM(用于将 React 组件渲染到浏览器中)等必要的依赖。

1. 安装必要的node和npm

  • 需要保证已安装node.js和npm,推荐18或以上。
  • 推荐使用pnpm作为react应用的包管理器,需要安装的node版本在18或以上。
# 验证 node 是否安装成功
node -v
# 全局安装包管理器pnpm
npm i pnpm -g --register=https://registry.npmmirror.com/
# 验证 pnpm 是否安装成功
pnpm -v

2. 创建React应用

npx create-react-app my-react-app

        安装成功后,命令行显示如下:

3. 运行项目

pnpm run start

        运行成功后,命令行显示如下:

4. 访问项目地址

        由于 Create React App 是由 Facebook 维护的,它通常会与 React 的更新保持同步。这意味着当 React 推出新的功能或改进时,Create React App 也会相应地进行调整和优化,以确保开发者能够充分利用 React 的最新特性,总之,React 是核心的 UI 库,而 Create React App 是一个方便快捷的开发工具,帮助开发者更轻松地构建 React 应用。它们相互配合,为前端开发提供了强大的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值