博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react
阅读量:4984 次
发布时间:2019-06-12

本文共 3193 字,大约阅读时间需要 10 分钟。

react安装

React的安装包,可到官网下载,但React Demos已经自带了React源码,不用另外安装,只需把这个库拷贝到硬盘

$ git clone git@github.com:ruanyf/react-demos.git 引用的三个库:react.js、react-dom.js和Browser.js,他们必须首先加载,react.js是React的核心库,react-dom.js提供了与Dom 相关的功能, Browser.js的作用是将JSX语法转为JavaScript语法,这一步很消耗时间,实际上线的时候,应该把它放到服务器端完成。
$ babel src --out-dir build:此命令可以将 src 子目录的 js 文件进行语法转换,转码后的文件全部放在 build 子目录。 ReactDOM.render 是 React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点。 HTML 语言直接写在 JavaScript 语言之中,不加任何引号,这就是 ,它允许 HTML 与 JavaScript 的混写。  JSX 的基本语法规则:遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 {
 开头),就用 JavaScript 规则解析

组件

React 允许将代码封装成组件(component),然后像插入普通 HTML 标签一样,在网页中插入这个组件。React.createClass 方法就用于生成一个组件类 所有组件类都必须有自己的 render 方法,用于输出组件。 注意,组件类的第一个字母必须大写,否则会报错,比如HelloMessage不能写成helloMessage。另外,组件类只能包含一个顶层标签,否则也会报错。

this.props.children

this.props 对象的属性与组件的属性一一对应,但是有一个例外,就是 this.props.children 属性。它表示组件的所有子节点

这里需要注意, this.props.children 的值有三种可能:如果当前组件没有子节点,它就是 undefined ;如果有一个子节点,数据类型是 object ;如果有多个子节点,数据类型就是 array 。所以,处理 this.props.children 的时候要小心。

React 提供一个工具方法  来处理 this.props.children 。我们可以用 React.Children.map 来遍历子节点,而不用担心 this.props.children 的数据类型是 undefined 还是 object

 

PropTypes

组件的属性可以接受任意值,字符串、对象、函数等等都可以。有时,我们需要一种机制,验证别人使用组件时,提供的参数是否符合要求。

获取真实的DOM节点

组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。只有当它插入文档以后,才会变成真实的 DOM 。根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做  ,它可以极大提高网页的性能表现。

但是,有时需要从组件获取真实 DOM 的节点,这时就要用到 ref 属性:

上面代码中,组件 MyComponent 的子节点有一个文本输入框,用于获取用户的输入。这时就必须获取真实的 DOM 节点,虚拟 DOM 是拿不到用户输入的。为了做到这一点,文本输入框必须有一个 ref 属性,然后 this.refs.[refName] 就会返回这个真实的 DOM 节点。

需要注意的是,由于 this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错。上面代码中,通过为组件指定 Click 事件的回调函数,确保了只有等到真实 DOM 发生 Click 事件之后,才会读取 this.refs.[refName] 属性。

React 组件支持很多事件,除了 Click 事件以外,还有 KeyDown 、CopyScroll 等

this.state

组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI 

由于 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

表单

用户在表单填入的内容,属于用户跟组件的互动,所以不能用 this.props

var Input = React.createClass({  getInitialState: function() {    return {value: 'Hello!'};  },  handleChange: function(event) {    this.setState({value: event.target.value});  },  render: function () {    var value = this.state.value;    return (      

{value}

); }});ReactDOM.render(, document.body);

文本输入框的值,不能用 this.props.value 读取,而要定义一个 onChange 事件的回调函数,通过 event.target.value 读取用户输入的值。textarea 元素、select元素、radio元素都属于这种情况。

组件的生命周期

组件的分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实 DOM

React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。

  • componentWillMount()
  • componentDidMount()
  • componentWillUpdate(object nextProps, object nextState)
  • componentDidUpdate(object prevProps, object prevState)
  • componentWillUnmount()

此外,React 还提供两种特殊状态的处理函数。

  • componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
  • shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

Ajax

组件的数据来源,通常是通过 Ajax 请求从服务器获取,可以使用 componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI 

 

React 本身没有任何依赖,完全可以不用jQuery,而使用其他库。

我们甚至可以把一个Promise对象传入组件

转载于:https://www.cnblogs.com/yuan619821/p/6227389.html

你可能感兴趣的文章
软件工程——理论、方法与实践⑦
查看>>
openstack镜像服务glance
查看>>
商品评论
查看>>
【转】Android 组件系列-----Activity保存状态
查看>>
批处理实现多线程执行命令列表文件
查看>>
light oj 1151 - Snakes and Ladders 高斯消元+概率DP
查看>>
SVG的简单介绍
查看>>
快速排序算法总结
查看>>
Sublime Text编辑远程Linux服务器上的文件
查看>>
服务器文件同步
查看>>
HDU-4283 You Are the One 区间DP
查看>>
RPG MAKER MV 打包APK教程(一键打包,无需编写任何代码)
查看>>
Asp.Net Web API 2第四课——HttpClient消息处理器
查看>>
3. 无重复字符的最长子串
查看>>
week3xml
查看>>
MFC 多线程
查看>>
Codeforces Round #402 (Div. 2) 阵亡记
查看>>
Ceph源码解析:Scrub故障检测
查看>>
LUOGU P1414 又是毕业季II
查看>>
BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)
查看>>