React高级指南(十二)【Integrating with Other Libraries】

【2024官方文档版】React快速入门 偶然翻开React的官方文档。觉得蛮有意思,总觉是入了坑洋洋洒洒几千字,记录学习React的一段旅程温故而知新^皿^ 阅读详情

React与其他库的集成

React可以在任何web应用中使用。React可以嵌入其他的应用中,也可以将其他的应用嵌入React中,不过需要多加小心。本篇教程将介绍部分常见的使用场景,主要包括集成jQuery和Backbone,但是同样的思想可以用来集成组件到其他任何现有的代码。

与DOM操作插件的集成

React 无法感知到React之外的DOM变化。这决定了更新只能基于React内部的表示,如果相同的DOM节点被其他库所操作,React会对此产生疑惑并无法恢复。

这并不意味着很难或者无法将React于其他影响DOM的方式相结合,你需要更加注意两者各自的行为。

避免冲突最简单的方式就是阻止React的更新。你可以通过渲染React无法更新的元素来实现,例如空的<div />。

如何处理这个问题

为了展示这个问题,我们来为通用的jQuery插件绘制一个包装器(wrapper)。

我们给根DOM元素添加ref。在componentDidMount中,我们将获得引用(reference),因此将其传递给jQuery插件。

为了防止React在mount之后处理DOM元素,我们将在render方法中返回空的<div />。

元素没有属性或者子元素,因此React不会更新它,使得jQuery插件可以自由地管理这部分的DOM节点。

class SomePlugin extends React.Component {
  componentDidMount() {
    this.$el = $(this.el);
    this.$el.somePlugin();
  }

  componentWillUnmount() {
    this.$el.somePlugin('destroy');
  }

  render() {
    return <div ref={el => this.el = el} />;
  }
}

注意,我们定义了componentDidMount和componentWillUnmount生命周期函数。很多jQuery插件为DOM元素添加了监听器(listener),因此在componentWillUnmount中退订监听器是非常重要的。如果插件本身不提供清除(cleanup)的方法,你可能需要自己提供,牢记一定要移除注册在插件中的事件监听者(event listener)以防止内存泄露。

与jQuery的Chosen插件集成

为了更具体地描述这个概念,让我们写一个最小化的Chosen插件的包装器(wrapper),其中插件Chosen接受<select>元素的输入。

注意:

仅仅不能因为有实现的可能性,就意味着这对React应用来讲是最佳实践。我们鼓励在可能的情况下使用React组件。React组件很容易在React应用中重用(reuse)并且能更好控制其行为与外观。

首先,我们来看看Chosen对DOM的行为。

如果你在<select>DOM节点上调用Chosen,其会读取原始DOM节点的属性,以内联样式方式隐藏,并在内部的虚拟表达中添加单独的DOM节点。随后触发jQuery事件通知事件改变。

让我们了解一下我们所设计的React组件包装器(wrapper)<Chosen>的API:

function Example() {
  return (
    <Chosen onChange={value => console.log(value)}>
      <option>vanilla</option>
      <option>chocolate</option>
      <option>strawberry</option>
    </Chosen>
  );
}

为了简单起见,我们将其实现为一个不受控组件。

首先我们先创建一个空的组件,其中包含render()方法,其返回一个由<div>包裹的<select>:

class Chosen extends React.Component {
  render() {
    return (
      <div>
        <select className="Chosen-select" ref={el => this.el = el}>
          {this.props.children}
        </select>
      </div>
    );
  }
}

需要注意为什么我们为<select>包裹一个额外的<div>。这是必须的,因为Chosen插件会为我们传入<select>节点后添加另一个DOM节点。。然而,就React而言,<div>总是只有一个子节点。这就是我们如何来确保React更新不会与Chosen插件所添加的额外DOM节点相冲突。值得注意的是,如果在React流之外修改了DOM节点,必须确保React无论如何都不会再接触DOM节点。

接下来,我们实现生命周周期函数。我们在componentDidMount中对引用的<select>节点初始化Chosen插件,并在componentWillUnmount中清除:

componentDidMount() {
  this.$el = $(this.el);
  this.$el.chosen();
}

componentWillUnmount() {
  this.$el.chosen('destroy');
}

在CodePen中尝试

注意,React对this.el变量并没有特殊的含义,生效的原因仅仅是我们先前在render()方法中ref对其进行了赋值:

<select className="Chosen-select" ref={el => this.el = el}>

上述对于组件的渲染已经足够,但是我们也想要获得值改变的通知(notifies about the value changes),为了实现这个目的,我们在<select>节点上订阅(subscribe)jQuery Chosen插件的change事件。

我们不直接给Chosen传递this.props.onChange,因为包括事件处理程序在内的组件的属性可能会发生改变。相反,我们声明handleChange方法,它会调用this.props.onChange方法,并订阅jQuery的change事件:

componentDidMount() {
  this.$el = $(this.el);
  this.$el.chosen();

  this.handleChange = this.handleChange.bind(this);
  this.$el.on('change', this.handleChange);
}

componentWillUnmount() {
  this.$el.off('change', this.handleChange);
  this.$el.chosen('destroy');
}

handleChange(e) {
  this.props.onChange(e.target.value);
}

在CodePen中尝试

最后,还剩一件事做。在React里props会随时间而改变。例如,如果父组件state改变,<Chosen>组件可能会得到不同的children。这意味着集成的要点是我们必须手动地更新DOM节点来响应props的更新,因为我们已经不能让React再管理DOM节点。

Chosen的文档建议我们使用jQuery的trigger()API来通知原始DOM节点的更新。我们使用React去关注<select>标签内的子节点this.props.children的更新,我们会在生命周期函数componentDidUpdate中向Chosen通知子元素的改变。

componentDidUpdate(prevProps) {
  if (prevProps.children !== this.props.children) {
    this.$el.trigger("chosen:updated");
  }
}

这样一来,当React导致<select>子元素的改变时,Chosen将会所感知到DOM节点的更新。

Chosen组件的完整实现如下所示:

class Chosen extends React.Component {
  componentDidMount() {
    this.$el = $(this.el);
    this.$el.chosen();

    this.handleChange = this.handleChange.bind(this);
    this.$el.on('change', this.handleChange);
  }

  componentDidUpdate(prevProps) {
    if (prevProps.children !== this.props.children) {
      this.$el.trigger("chosen:updated");
    }
  }

  componentWillUnmount() {
    this.$el.off('change', this.handleChange);
    this.$el.chosen('destroy');
  }

  handleChange(e) {
    this.props.onChange(e.target.value);
  }

  render() {
    return (
      <div>
        <select className="Chosen-select" ref={el => this.el = el}>
          {this.props.children}
        </select>
      </div>
    );
  }
}

在CodePen中尝试

与其他的视图库集成

感谢极具灵活性的方法ReactDOM.render(),使得React可以嵌入其他的应用中。

虽然React通常在启动时将单个根节点的React组件加载进DOM节点,但ReactDOM.render()也可以被多次调用来生成独立的部分UI,小到一个按钮,大到一个应用。

事实上,在Facebook中React就是这么用的。这使得我们可以一步一步地使用React编写程序,并与我们现存的服务器生成的模板与其他客户端代码相结合。

用React替换字符串渲染

在之前的web应用中,一种常见的模式是将DOM块作为字符串描述,并将其插入DOM节点,例如: $el.html(htmlString)。这种代码是非常适合引入React的,仅仅需要将渲染的字符串重写为React组件。

因此下面的jQuery实现:

$('#container').html('<button id="btn">Say Hello</button>');
$('#btn').click(function() {
  alert('Hello!');
});

可以用React组件重写成:

function Button() {
  return <button id="btn">Say Hello</button>;
}

ReactDOM.render(
  <Button />,
  document.getElementById('container'),
  function() {
    $('#btn').click(function() {
      alert('Hello!');
    });
  }
);

从这里开始,你就可以将更多的逻辑移动进组件中,并采用更常见的React实践。例如,在组件,最好不要依赖id值,因为相同的组件可能被多次渲染。相反,我们可以使用React事件系统,直接在React的<button>元素上注册点击事件处理函数。

function Button(props) {
  return <button onClick={props.onClick}>Say Hello</button>;
}

function HelloButton() {
  function handleClick() {
    alert('Hello!');
  }
  return <Button onClick={handleClick} />;
}

ReactDOM.render(
  <HelloButton />,
  document.getElementById('container')
);

在CodePen中尝试

你可以按照你的想法创建多个独立的组件,并使用ReactDOM.render()将它们渲染进不同的DOM容器中。在随着你逐渐地将你的应用转成React应用的过程中,你会将组件合并成更大的组件,将将部分的ReactDOM.render()调用改为React的层次结构。

在Backbone视图中集成React

Backbone视图(View)是典型的使用字符串或者字符串产生函数来生成DOM元素的内容。这个过程可以通过渲染React组件来替代。

下面我们将创建一个名为ParagraphView的Backbone视图,它将用来覆盖Backbone的render函数,渲染React的<Paragraph>组件到Backbone提供的DOM节点。这里我们也使用ReactDOM.render():

function Paragraph(props) {
  return <p>{props.text}</p>;
}

const ParagraphView = Backbone.View.extend({
  render() {
    const text = this.model.get('text');
    ReactDOM.render(<Paragraph text={text} />, this.el);
    return this;
  },
  remove() {
    ReactDOM.unmountComponentAtNode(this.el);
    Backbone.View.prototype.remove.call(this);
  }
});

在CodePen中尝试

在remove方法中我们必须调用ReactDOM.unmountComponentAtNode(),使得React注销与组件树销毁时相关的事件处理函数和其他相关资源。

当组件从组件树中删除时,清除将自动执行,但是因为我们手动地移除整个组件树,我们必须调用这个方法。

React与Model层集成

尽管我们推荐使用单向数据流例如:React state、Flux或者Redux,但React组件仍然可以使用其他框架和库的model层。

在React组件中使用Backbone Models

对React组件而言,使用Backbone models最简单的方式就是监听不同的change事件并手动强制刷新。

负责渲染model的React组件必须监听'change'事件,负责渲染collections的React组件必须监听'add'和'remove'事件。在这些场景下,调用this.forceUpdate()用新的数据重新渲染组件。

在下面的例子中,List组件渲染Backbone的collection,而Item组件负责渲染单个items。

class Item extends React.Component {
  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
  }

  handleChange() {
    this.forceUpdate();
  }

  componentDidMount() {
    this.props.model.on('change', this.handleChange);
  }

  componentWillUnmount() {
    this.props.model.off('change', this.handleChange);
  }

  render() {
    return <li>{this.props.model.get('text')}</li>;
  }
}

class List extends React.Component {
  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
  }

  handleChange() {
    this.forceUpdate();
  }

  componentDidMount() {
    this.props.collection.on('add', 'remove', this.handleChange);
  }

  componentWillUnmount() {
    this.props.collection.off('add', 'remove', this.handleChange);
  }

  render() {
    return (
      <ul>
        {this.props.collection.map(model => (
          <Item key={model.cid} model={model} />
        ))}
      </ul>
    );
  }
}

在CodePen中尝试

从Backbone Models中提取数据

上述方法需要你的React组件了解Backbone的模型和集合。如果你随后计划迁移到另一个数据管理方案,你可能希望将Backbone的概念集中在尽可能少的代码中。

一个解决这个问题的方案是,每当模型的数据改变时将模型的属性提取成一个纯数据,并将逻辑保存在一个单一的位置。接下来的高阶组件提取Backbone中的属性作为state,并将数据传递给被包裹的组件。

这样,仅有高阶组件需要了解Backbone内部的model,应用中大多数的组件可以与Backbone保持独立。

在下面的例子中,我们将复制model的属性来形成最初的状态。我们订阅change事件(以及在卸载时的unsubscribe事件),当change事件发生时,我们使用model的当前属性来更新state。最终,我们确定,如果model属性本身改变时,我们不要忘记退订之前的model,订阅新的model。

请注意,下面的例子并不意味着涵盖与Backbone集成使用的方方面面,但是它提供一种通用的思路来解决上述的问题:

function connectToBackboneModel(WrappedComponent) {
  return class BackboneComponent extends React.Component {
    constructor(props) {
      super(props);
      this.state = Object.assign({}, props.model.attributes);
      this.handleChange = this.handleChange.bind(this);
    }

    componentDidMount() {
      this.props.model.on('change', this.handleChange);
    }

    componentWillReceiveProps(nextProps) {
      this.setState(Object.assign({}, nextProps.model.attributes));
      if (nextProps.model !== this.props.model) {
        this.props.model.off('change', this.handleChange);
        nextProps.model.on('change', this.handleChange);
      }
    }

    componentWillUnmount() {
      this.props.model.off('change', this.handleChange);
    }

    handleChange(model) {
      this.setState(model.changedAttributes());
    }

    render() {
      const propsExceptModel = Object.assign({}, this.props);
      delete propsExceptModel.model;
      return <WrappedComponent {...propsExceptModel} {...this.state} />;
    }
  }
}

为了演示如何使用这个例子,我们将NameInputReact组件连接到Backbone的model,并在每次输入改变时更新其firstName属性。

function NameInput(props) {
  return (
    <p>
      <input value={props.firstName} onChange={props.handleChange} />
      <br />
      My name is {props.firstName}.
    </p>
  );
}

const BackboneNameInput = connectToBackboneModel(NameInput);

function Example(props) {
  function handleChange(e) {
    model.set('firstName', e.target.value);
  }

  return (
    <BackboneNameInput
      model={props.model}
      handleChange={handleChange}
    />
  );
}

const model = new Backbone.Model({ firstName: 'Frodo' });
ReactDOM.render(
  <Example model={model} />,
  document.getElementById('root')
);

在CodePen中尝试

这个技术并不局限于Backbone。你可以通过在生命周期函数中订阅model改变并且可选地将model中的数据复制进React内部的state的方式,实现React与其他model库集成使用。

React 入门完全指南:从零开始构建现代 Web 应用 React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发和维护。它以其组件化、声明式和高效的渲染机制而闻名,广泛应用于单页应用(SPA)和复杂的用户界面开发。本文将带你快速入门 React,掌握其基础概念和用法。 阅读详情

相关推荐

半导体设备微振动控制:天棚阻尼PID与SIMULINK建模实战

半导体制造设备对微振动的敏感度已进入纳米级,光刻机、量测设备等一旦遭遇超过VC-C振动准则的扰动,便会出现套刻误差或检测误判。主动隔振技术通过传感器、控制器与执行器形成闭环,能有效抑制低频共振,其中天棚阻尼控制因物理概念清晰、鲁棒性强而成为工程首选。结合MATLAB/SIMULINK建模,可在设计阶段完成系统性能边界评估与参数整定,再通过C代码生成与FMU导出实现算法向控制器和跨平台仿真迁移。本文从VC-C指标拆解出发,依次讲解天棚阻尼PID控制原理、两自由度被控对象建模、控制增益估算、仿真验证方法,并给出

weixin_29169505的博客 324

React教程(详细版)

一、简介(背景) 1.1、概念 它是一个将数据渲染为HTML视图 的js库 1.2、原生js痛点 用dom的API去操作dom,繁琐且效率低 用js直接操作dom,浏览器会进行大量的回流和重绘 原生jjs没有组件化的编程方案,代码复用性低,哪怕有模块话的概念,但模块化也只能拆解一个个js,对样式和结构也没办法拆解,组件化就相当于3剑客整体拆解,成为一个个的小功能 1.3、React特点 采用组件化模式,声明式编码,提高开发效率和组件复用性 在React Native中可以用react预发进行安卓、io

Ronychen的博客 20万+

树莓派驱动DLPDLCR230NPEVM+framebuffer显示图片

DLPDLCR230NPEVM DLP® LightCrafter™ Display 230NP 是一个易于使用的紧凑型即插即用评估平台,适用于消费类产品、工业、医疗和物联网 (IoT) 市场中的各种超便携显示应用。此评估模块 (EVM) 采用 DLP230NP 芯片组,该芯片组由DLP230NP.23 1080p DMD、DLPC3436显示控制器和DLPA2005PMIC/LED 驱动器组成。此 EVM 外形小巧,配备生产就绪型光学引擎以及支持 18 位 RGB 并行视频接口...

L_Y000的博客 2614

React 超详细入门教程

React 是一个用于构建用户界面的 JavaScript 库,主要用于构建 UI,而不是一个 MVC 框架,但可以使用 React 作为 MVC 架构的 View 层轻易的在已有项目中使用,它是一个用于构建用户界面的 JavaScript 库,起源于 Facebook 的内部项目,用来架设 Instagram 的网站,于 2013 年 5 月开源。React 是用于动态构建用户界面的 JavaScript 库(只关注于视图)。

m0_60970928的博客 1万+

【机械臂算法】基于最小惯性参数集的动力学辨识仿真实践

本文深入探讨了机械臂动力学参数辨识的核心挑战与解决方案,重点阐述了基于最小惯性参数集的理论与方法。通过分析PUMA560实例,详细介绍了利用QR分解法或符号推导法获取可辨识参数集,并系统讲解了从激励轨迹设计、仿真数据采集、线性系统求解到模型验证的完整实践流程,为高精度动力学建模与控制奠定了坚实基础。

weixin_29054399的博客 376

遥感图像地物覆盖分类,数据集制作-分类模型对比-分类保姆级教程

1.新建shp文件地理坐标系保持和影像一致,面类型2.打开属性表3.添加字段这里分类6类,点击添加值添加添加完毕开始人工选地物类型,制作数据集开始标注,标注的时候可以借助谷歌地图来看标记足够多的样本打开面转栅格工具设置nodata值为15。

热爱分享,热爱记录 2524

React教程(由浅到深)

1.params参数路由链接(携带参数):<Link to='/demo/test/tom/18'}>详情</Link>注册路由(声明接收):<Route path="/demo/test/:name/:age" component={Test}/>`接收参数:this.props.match.params2.search参数路由链接(携带参数):<Link to='/demo/test?name=tom&age=18'}>详情</Link>

web$-小白 3万+

数据科学技术与应用【中国大学MOOC】:数据可视化_第五次作业_答案

数据科学技术与应用 数据可视化 第五次作业 答案 题目来源:中国大学MOOC-东华大学-宋晖等-数据科学技术与应用 1 ( 30分 ) 2012—2017年我国人均可支配收入为[1.47, 1.62, 1.78, 1.94, 2.38, 2.60](单位:万元)。按照要求绘制以下图形。 1)模仿例4-1和例4-3,绘制人均可支配收入折线图。用小矩形标记数据点,黑色虚线,用注解标注最高点,图标题为“Income chart”,设置坐标轴标题,最后将图形保存为JPG文件。 2)模仿例4-2,使用多个子图分别绘制

Herbert胡不归 6140

React教程(详细)

React是一个用于构建用户界面的 JavaScript 库。1:创建一个 React 程序2:开始3:使用 class 和 function 创建组件3.1:function 组件3.2:class 组件4:生命周期5:state6:事件处理6.1:方式一:不绑定this6.2:方式二:绑定this,返回函数调用6.3:方式三:绑定this,使用bind绑定7:条件渲染8:列表9:受控组件值的实时修改

qq_41974199的博客 3946

机器人外接 USB 音响完整配置指南

摘要:本文介绍了为机器人配置外接音响的方法。由于内置音响音量小且有散热噪音,建议使用Type-C接口外接音响。配置步骤包括:1)通过aplay -l命令查看音响端口信息;2)使用aplay命令测试音频播放;3)通过amixer命令设置音量。关键点在于正确识别音响的卡号(如card 2)和设备号(如device 0),并在命令中准确配置这些参数即可实现外接音响的正常使用。

m0_47999117的博客 356

Imagiq AI-PQ 图像质量增强模块详解:联发科 ISP 中的 AI 图像管线实战解析

随着智能手机影像系统对图像质量要求的持续提升,联发科在其 Imagiq ISP 中引入了 AI 驱动的图像增强模块——AI-PQ(AI-based Picture Quality),通过 AI 模型对亮度、色彩、噪声、锐度等多个维度进行动态调节与增强,实现更加智能化和个性化的图像输出效果。AI-PQ 在实际工程中已成为影响照片风格、视频观感和多模组一致性的核心能力之一。本文围绕 Imagiq 平台最新一代 AI-PQ 模块(2024-2025年量产平台为基础),结合实机开发与调优经验,深入剖析其各子模块的算

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1417

React 全面入门与进阶实战教程

React是由Facebook开发的前端JavaScript库,采用组件化开发方式提升UI复用能力。本文介绍了React的核心特点、项目搭建方式、基础语法和组件通信方法。内容包括:使用Create React App和Vite初始化项目、JSX语法、组件状态管理(useState)、生命周期(useEffect)、父子组件通信(props和回调)、Context跨层通信、React Router路由配置。还涵盖了Redux Toolkit状态管理、性能优化技巧(React.memo、useCallback)

idree的博客 6742

Challenge 6 - OSCP C

开放了161端口,直接snmpbulkwalk扫描得到账号密码试了那几个web端口,发现可以登录8083的vesta,但是需要用户名大写Jack接着登录之后里面可以创建计划任务,直接弄个反弹shell,一分钟回弹。得到shell后,运行linpeas.sh提供了几个可能的漏洞,挨个试一下。

羽的博客 4111

React前端框架全面教程:从入门到进阶

React 是由 Facebook 开发并维护的一个开源JavaScript 库,用于构建用户界面。它的核心理念是组件化,允许开发者将 UI 拆分为独立的、可复用的部分,从而提高代码的可维护性和可读性。本文详细介绍了 React 的核心概念、环境搭建、组件创建、状态管理、组件通信、路由管理、表单处理、样式管理以及组件测试等内容。通过这些知识的学习和实践,你可以更高效地开发 React 应用。

荷塘月色 4005

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

react快速开始(一)-入门基础

react快速开始-入门基础 在前端框架框架方面,其中的佼佼者React和AngularJS均出名门公司,具有非凡的影响力和号召力。尤其是React,它定位于前端组件化、高性能和跨平台,它提出的基于虚拟DOM的理念一出现就获得了广泛的关注和认可,也被AngularJS等其他前端框架所引入。

西京刀客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

React框架详解:从入门到精通(详细版)

组件化是现代前端开发的灵魂。

chaosweet的博客 1万+

带你入门React

笔者之前的工作经验都局限于Vue,今天稍稍体验React,记录相关历程。本篇文章是基于官网入门的react,希望能对读者朋友们有帮助吧。加油,以后我还是要回归Vue的。体验下也好~

zxdznyy的博客 2528

ReactJS入门之Model层

ReactJS入门之Model层

qq_61313896的博客 2457

从0到1无比流畅的React入门教程

用于构建 Web 和原生交互界面的库React 用组件创建用户界面是一个将数据渲染为HTML视图的开源JS库执行顺序->或者->render->

tangdou369098655的博客 3398

React体系化学习 - 全面教程

React体系化学习-全面教程

YunWisdom 5842

react入门总结

从0学习react框架,以下就是我学习的心得,通过笔记的方式记录学习的内容。内容会根据每次学习的情况进行更改,直至学完为止

weixin_51376325的博客 4680

前端 react教程(详细版)

前端面试 react基础教程 。 类组件与函数组件区别。state与props区别.useCallback与useMemo区别.react生命周期。 高阶组件。reactHooks

it_varlue的博客 2万+

React入门看这篇就够了

react - JSX React 背景介绍 React 入门实例教程 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。 什么是React A JAV...

weixin_33962923的博客 2005

【React】React 详细教程

前言 1、react与vue的对比 1.1、什么是模块化 是从代码的角度来进行分析的 把一些可复用的代码抽离为单独的模块;便于项目的维护和开发 1.2、什么是组件化 是从UI界面角度来进行分析的 把一些可复用的UI元素抽离为单独的组件 1.3、组件化的好处 随着项目规模的增大,手里的组件就越来越多; 很方便就能把现有的组件拼接为一个完整的页面 1.4、vue中是如何实现组件化的 通过.vue文件来创建对应的组件 template 结构 script 行为 style

NAMECZ的博客 4972

React 入门教程:从环境搭建到组件开发

环境搭建与项目初始化;函数组件与 JSX 语法;状态管理(useState组件通信(props)。下一步可学习useEffect(处理副作用)、路由()等进阶内容,逐步构建复杂应用!

CbukeJ的博客 702
上一篇: React高级指南(十一)【Higher Order Components】
下一篇: Vue.js解析(一)【Vue.js响应式原理】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值