前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React.js 概念与入门

React.js 概念与入门

作者头像
fanzhh
发布于 2019-08-20 03:23:16
发布于 2019-08-20 03:23:16
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

什么是React

React 是Facebook开发的UI库,这个库有助于创建交互式、基于状态、可重用的UI部件。React已经应用与Facebook,Instagram全部是用React写的。

React 一个独特的地方是,它不仅可以运用与客户端,也可用于服务端,客户端和服务端可一协同操作。

React 使用了叫做Virtual DOM概念的东西,它可以根据状态的变化,有选择地渲染节点和子节点。为了更新部件,React做尽量少的DOM处理操作。

Virtual DOM如何工作?

想象你以人为模型创建了对象。这个对象具有人的属性,实时反应人当前的状态。这基本上就是React中DOM所做的。

现在想象如果你使用这个对象并做了一些改变。添加胡须,二头肌,一双英俊的眼睛。在React世界里,当你做这些改变的时候,两件事发生了。第一,React运行“辨别”算法,确定什么改变了。第二,更新DOM,确保结果和改变的一致。

React的工作方式,不是根据真实的人从头再建,它只改变对象的脸和胳膊。这意味着,如果你在文本框中输入文字,这时渲染操作开始,即使文本框的父节点没有做更新的准备,文本本身知道如何操作。

由于React使用的是虚拟的DOM,这也就产生了另一种有趣的可能。我们可以在服务端渲染虚拟的DOM,快速更新React视图。

开始

使用React,首先要安装React CLI工具(用以创建React应用),运行以下命令创建新应用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装 CLI 工具
npm install -g create-react-app
# 创建应用
create-react-app my-app-name
# 安装依赖包
cd my-app-name
npm install

页面设置

设置页面的时候,你需要引入react.jsreact-dom.js及Babel编译器脚本。然后在type设置为text/babel的脚本区域写部件(component):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello World</title>
    <script src="https://unpkg.com/react@latest/dist/react.js"></script>
    <script src="https://unpkg.com/react-dom@latest/dist/react-dom.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
  </head>
  <body>
    <div id="myDiv"></div>
    <script type="text/babel">

    <!-- React Code Goes Here -->

    </script>
  </body>
</html>

React中,部件(component)加载到元素(element)上,所以在这个例子中,我们使用myDiv作为它的父容器

虽然这个开始方式很容易,在创建实际项目的时候,一般使用Browserify或者Webpack来将部件放置到不同的文件中。

基础

React是以部件为基础的,我们写一个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/jsx">
    /** @jsx React.DOM */
    React.render(
        <h1>Hello, world!</h1>,
        document.getElementById('myDiv')
    );
</script>

如果这样的代码是你第一次看到,你会有点疑惑:这段代码里隐含了Javascript/HTML的什么魔法?

JSX

它叫做JSX,是Javascript XML语法的变种,使你在脚本中写类似HTML标记。为了与Javascript保留关键字区别,对于一些常规的html标记,在JSX中classclassNameforhtmlFor。如果不使用JSX,上述的代码是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** @jsx React.DOM */
React.render(
  React.DOM.h1(null, 'Hello, world!'),
  document.getElementById('myDiv')
);

部件(components)

在上面代码使用render方法的时候,我们第一个参数是我们要渲染的部件,第二个参数是部件要挂载的DOM节点。我们可以使用createClass方法创建部件类,在创建参数中对对象配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var MyComponent = React.createClass({
    render: function(){
        return (
            <h1>Hello, world!</h1>
        );
    }
});

创建类之后,我们可以在文档中渲染它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
React.render(
    <MyComponent/>,
    document.getElementById('myDiv')
);

属性(Props)

定义我们的部件时,我们可以为部件定义属性。这些属性在部件中表示为this.props,在渲染方法中能够动态显示数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var MyComponent = React.createClass({
    render: function(){
        return (
            <h1>Hello, {this.props.name}!</h1>
        );
    }
});

React.render(<MyComponent name="Handsome" />, document.getElementById('myDiv'));

部件生命周期和状态

创建部件我们只需要render方法即可,实际如果你想要部件发挥作用,我们有时需要部件的生命周期方法。

生命周期方法

以下的生命周期方法你应该了解:

  • componentWillMount 激活一次,在客户端&服务端渲染发生之前
  • componentDidMount 激活一次,在客户端发生渲染之后
  • shouldComponentUpdate 返回部件是否更新
  • componentWillUnmount 在部件卸载之前激活

生命周期方法中的函数

  • getInitialState 返回状态的初始化值
  • getDefaultProps 如果属性没有提供,设置回调属性值
  • mixins 对象数组,用以扩展当前部件的功能

状态

每个部件都既有状态state也有属性props,设置状态用setState方法。调用setState会触发UI更新。如果我们想在交互之前初始化部件状态,可以用getInitialState。下面,我们设置部件的状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var MyComponent = React.createClass({
    getInitialState: function(){
        return {
            count: 5
        }
    },
    render: function(){
        return (
            <h1>{this.state.count}</h1>
        )
    }
});

事件(Events)

React中,事件作为属性绑定到部件上,可以触发方法。我们用事件来实现计数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var Counter = React.createClass({
  incrementCount: function(){
    this.setState({
      count: this.state.count + 1
    });
  },
  getInitialState: function(){
     return {
       count: 0
   }
  },
  render: function(){
    return (
      <div class="my-component">
        <h1>Count: {this.state.count}</h1>
        <button type="button" onClick={this.incrementCount}>Increment</button>
      </div>
    );
  }
});

React.render(<Counter/>, document.getElementById('myDiv'));

上面的代码演示在这儿

单向数据流

React中,应用数据流经过stateprops单向流动。这意味着,在多层级部件页面中,父部件负责管理状态并向下传递。

更新状态使用setState方法以确保UI的刷新。结果值应该以子部件属性this.props向下传递。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** @jsx React.DOM */

var FilteredList = React.createClass({
  filterList: function(event){
    var updatedList = this.state.initialItems;
    updatedList = updatedList.filter(function(item){
      return item.toLowerCase().search(
        event.target.value.toLowerCase()) !== -1;
    });
    this.setState({items: updatedList});
  },
  getInitialState: function(){
     return {
       initialItems: [
         "Apples",
         "Broccoli",
         "Chicken",
         "Duck",
         "Eggs",
         "Fish",
         "Granola",
         "Hash Browns"
       ],
       items: []
     }
  },
  componentWillMount: function(){
    this.setState({items: this.state.initialItems})
  },
  render: function(){
    return (
      <div className="filter-list">
        <input type="text" placeholder="Search" onChange={this.filterList}/>
      <List items={this.state.items}/>
      </div>
    );
  }
});

var List = React.createClass({
  render: function(){
    return (
      <ul>
      {
        this.props.items.map(function(item) {
          return <li key={item}>{item}</li>
        })
       }
      </ul>
    )  
  }
});

React.render(<FilteredList/>, document.getElementById('myDiv'));

上面的示例代码在这儿

结论

上面介绍的是React基础只是,如需进一步了解,可以阅读React APIJSX

以上内容来自于Learning React.js: Getting Started and Concepts

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Reactjs 入门基础(二)
如果我们需要向组件传递参数,可以使用 this.props 对象,实例如下:   <body>     <div id="example"></div>     <script type="text/babel">       var HelloMessage = React.createClass({         render: function() {           return <h1>H
用户1197315
2018/01/22
7720
初探ReactJS.NET 开发
ReactJS通常也被称为"React",是一个刚刚在这场游戏中登场的新手。它由Facebook创建,并在2013年首次发布。Facebook认为React在处理SPA问题上可以成为Angular的替代品,因此如果你认为Angular和React这两种框架是竞争对手,那你的理解就对了。不过,与Angular相比,React最大的不同之处在于,它是一个更高效、具有更高性能、速度更快的类库。下图展示了使用React、Angular、Knockout(另一种类库,在本文中不做讨论),以及纯粹的JavaScript
张善友
2018/01/19
3.6K0
初探ReactJS.NET 开发
React之父子组件传递和其它一些要点
react是R系技术栈中最基础同时也是最核心的一环,2年不到获取了62.5k star(截止到目前),足可见其给力程度。下面对一些react日常开发中的注意事项进行罗列。 React的组件生命周期 r
牧云云
2018/05/02
1.6K0
React之父子组件传递和其它一些要点
CJSX试用 – 使用React靠谱的新姿势
React真是个好东西,不过JS语法有时候还是难免显得臃肿。ES6虽然改进了许多,不过还是有很多槽点。比起来我感觉CoffeeScript就舒服了许多。
KAAAsS
2022/01/14
7050
CJSX试用 – 使用React靠谱的新姿势
Reactjs 入门基础(三)
State 和 Props 以下实例演示了如何在应用中组合使用 state 和 props 。我们可以在父组件中设置 state, 并通过在子组件上使用 props 将其传递到子组件上。 在 render 函数中, 我们设置 name 和 site 来获取父组件传递过来的数据。 Props 验证 Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效。 当向 props 传入无效数据时,Ja
用户1197315
2018/01/22
3K0
React 入门实例教程
现在最热门的前端框架,毫无疑问是 React 。 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑。 React 起源于 Face
ruanyf
2018/04/12
1.9K0
React 入门实例教程
实现react源码的核心功能
React 的代码还是非常复杂的,虽然这里是一个简化版本。但是还是需要有不错的面向对象思维的。React 的核心主要有一下几点。
goClient1992
2022/12/13
1.1K0
【一起来烧脑】一步React.JS学会体系
React.JS是用于构建用户界面的JavaScript库 React.JS主要用于构建UI 下载使用:React.JS下载地址
达达前端
2019/07/22
9330
React基础之JSX语法
概述 JSX是React的核心组成部分,它使用XML标记的方式去直接声明界面,界面组件之间可以互相嵌套。可以理解为在JS中编写与XML类似的语言,一种定义带属性树结构(DOM结构)的语法,它的目的不是要在浏览器或者引擎中实现,它的目的是通过各种编译器将这些标记编译成标准的JS语言。 使用JSX语法后,你必须要引入babel的JSX解析器,把JSX转化成JS语法,这个工作会由babel自动完成。同时引入babel后,你就可以使用新的es6语法,babel会帮你把es6语法转化成es5语法,兼容更多的浏览器。
xiangzhihong
2018/02/06
2.2K0
React—最简洁的技术学习(一)
此文章是本人在学习React过程中总结起来的一些小经验,因自己在网络上找到的React的教程很多都是一上来就是构建复杂的React环境,Webpack,ES2015等技术的使用,让其简洁的React变得复杂化。本文只为分享简洁的学习过程,让大家理解React,当然其中的不足之处,还望大家指出,谢谢。
全栈程序员站长
2022/08/04
1.8K0
初级React入门
一、引入Reactjs 方法一:直接下载相关js文件引入网页,其中react.js 是 React 的核心库,react-dom.js 是提供与 DOM 相关的功能,Browser.js 的作用是将 JSX 语法转为 JavaScript 语法,这一步很消耗时间,实际上线的时候,应该将它放到服务器完成。 <script src="../build/react.js"></script> <script src="../build/react-dom.js"></script> <script src="..
小古哥
2018/03/08
1.3K0
2022前端开发社招React面试题 附答案
当 Facebook 第一次发布 React 时,他们还引入了一种新的 JS 方言 JSX,将原始 HTML 模板嵌入到 JS 代码中。JSX 代码本身不能被浏览器读取,必须使用Babel和webpack等工具将其转换为传统的JS。很多开发人员就能无意识使用 JSX,因为它已经与 React 结合在一直了。
用户9255528
2021/12/08
8130
一定要熟记这些常被问到的React面试题
要了解 JSX,首先先了解什么三个主要问题,什么事 VDOM,差异更新和 JSX 建模:
wscats
2020/06/06
1.4K0
一段探索React自建内部构造的旅程
在先前的文章里我们涵盖了React基本原理和如何构建更加复杂的交互组件。此篇文章我们将会继续探索React组件的特性,特别是生命周期。
一个会写诗的程序员
2018/08/17
1.1K0
一段探索React自建内部构造的旅程
react入门——慕课网笔记
  1. 被称为语法糖:糖衣语法,计算机语言中添加的某种语法,对语言的功能没有影响,更方便程序员使用,增加程序的可读性,降低出错的可能性
超然
2018/08/03
1.4K0
react入门——慕课网笔记
学习 React Native for Android:React 基础
本文将从一个简单的例子开始,逐步深入 React 的编写细节。 React Native 主张用 React 的开发思维来编写 UI 层。因此在学习 React-Native 之前,了解基本的 React 的语法和存在的坑会对今后 React Native 的开发大有裨益。 本文将从一个简单的例子开始,逐步完善我们的程序。在这个过程中,我们将一步步探讨如何用 React 来开发网页应用,以及需要注意的陷阱。与其他教程不同,本文将采用类似 Zed A. Shaw 的 《Learn Code the Hard
HaHack
2018/07/03
9.4K0
《React极简教程》第二章 React JSXReact JSXReact.createElement独立文件JavaScript 表达式样式数组HTML 标签 vs. React 组件
JSX语法,像是在Javascript代码里直接写XML的语法,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码,React 官方推荐使用JSX, 当然你想直接使用纯Javascript代码写也是可以的,只是使用JSX,组件的结构和组件之间的关系看上去更加清晰。
一个会写诗的程序员
2018/08/20
1.2K0
react.js 学习笔记
单向数据流驱动,父节点传递到子节点 react最重要是组件 ReactJS官方地址:https://facebook.github.io/react/ GitHub地址:https://github.com/facebook/react 一、开发环境的搭建: 1、在官网安装react.js 2、在官网安装react-dom.js 3、react.createClass 注册一个组件类 4.ReactDOM.render()将模板转成和html语言,并插入指定的DOM节点,说白了可以理解成就是一个渲染到页
企鹅号小编
2018/02/06
2K0
react.js 学习笔记
React学习(2)——状态、事件与动态渲染 原
    上一篇文章最后说明了组件传入的参数必须是只读的,但是在丰富的前端应用中,页面样式是时时刻刻会发生变化的。在前面的章节中介绍了一个时钟的例子,通过重复调用ReactDOM.render() 来渲染组件:
随风溜达的向日葵
2018/08/15
3K0
2021前端react高频面试题
当 **Facebook** 第一次发布 React 时,他们还引入了一种新的 JS 方言 JSX,将原始 HTML 模板嵌入到 JS 代码中。JSX 代码本身不能被浏览器读取,必须使用Babel和webpack等工具将其转换为传统的JS。很多开发人员就能无意识使用 JSX,因为它已经与 React 结合在一直了。
zz1998
2021/09/28
8260
相关推荐
Reactjs 入门基础(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验