React的学习(上)

摘要

众所周知,前端三大框架Angular、React、Vue,所以为了跟上时代的步伐,最近开始着手学习React,这时候就发现个大问题,框架一直在更新,提倡的编写语法也在更新,网上有许多教程都是一两年前的了,因此,我决定直接从官方英文文档入手学习,学习的框架版本为最新的ReactV15.5.0,现将学习笔记整理如下,以供大家参考,本篇文章主要是react一些基础语法的讲解与总结,如需深入了解,可查阅官方文档,也敬请期待后续文章。

一、React有什么好?

1、组件化

什么是组件?答曰:功能独立,封装良好的代码块。前端页面一直提倡组件化,因为组件化可以实现高重用,大大提升了我们的开发效率,也让我们的页面结构变得更加清晰。所以React提倡将页面解构成组件树,以组件为最小单元构造页面。

2、虚拟DOM

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

二、用React构建你的webApp需要什么?

你需要React、React-DOM、babel。
React-DOM的作用就是将我们本地的虚拟DOM插入文档,使其变成真实的DOM。
我们在编写虚拟DOM时,可以使用JSX语法,它将JS和XML语法结合在一起,如下

const user = {
  firstName: ‘Harper‘,
  lastName: ‘Perez‘
};
//你可以将你的JS表达式放入{}中,如下
const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

同时React提倡使用ES6语法,所以我们需要使用babel编译我的JSX和ES6语法

三、开始构件你的组件

大家如果懒得搭建环境,可以在这里练习。

1、定义组件

官方提供两种方法:
1)以JS函数方法,这种方法适用于比较简单的组件,比如根据输入返回模板后,无state的变化

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

2)以 ES6 class 的方式

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

注意:组件名建议都以大写字母开头,以和HTML标签区分

2、渲染组件

上面构建出来的都是虚拟DOM,要使其在页面显示,还需要将其插入真实DOM,这时就需要,也是必须要以下这步

ReactDOM.render(
  <Welcome name="嵘么么"/>,
  document.getElementById(‘root‘)
);

ReactDOM.render()接受两个参数,第一个是要渲染的组件,第二个使所插入的地方

3、state和props

学习完上面方法,你就可以构建一个静态的组件了,但是,这时候就有个问题,我们组件间需要通信,我们页面需要交互,那怎么实现呢?不急,我们接下来一一讲解
1)props
组件的属性值都保存在props这个对象上,这是个可读对象,我们可以给组件定义自定义属性,调用组件时设置的属性值,在组件内部可以通过this.props.yourprop拿到,例子如下

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}
ReactDOM.render(
  <Welcome name="嵘么么"/>,
  document.getElementById(‘root‘)
);

//这里的引号包含的嵘么么也可以是变量,这时候就不能用引号包含了,需要用{}包含

2)state
state是组件的私有变量,只有组件自己可以访问,state的关键作用是:React只有当state改变时会重新渲染组件,因此,我们可以把组件看成个状态机,当state改变时,我们的视图也会改变。state的初始化,需要在constructor构造函数里完成。

class Welcome extends React.Component {
  constructor(props){
    super(props);
    this.state={
        key:value
    }
  }
  //注意,如果用到构造函数,那么应如此书写constructor(props){super(props);你的代码}
  //props和super(props);是必须的,你的代码应该放在super()之后
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

修改state时,则需要通过

this.setState({
    key:newValue
});
//setState会将传入的对象与原始state合并,而非覆盖

这里对state和props只讲解了基础使用,两者的详细区别与实例,可查看我的另外一篇文章《React的组件间通信》

4、事件

事件是页面交互的基础,React组件中,事件监听程序名采用驼峰法命名,如下:

class Welcome extends React.Component {
    constructor(props){
    super(props);
    this.state={
        name:"嵘么么的个人博客"
    }
    this.handleClick=this.handleClick.bind(this);
  }
  handleClick(){
    const name=this.state.name;
    alert(name+"欢迎您!");
  }
  render() {
    return <div onClick={this.handleClick}>点我</div>;
  }
}
ReactDOM.render(
  <Welcome />,
  document.getElementById(‘root‘)
);

上面的表达式this.handleClick=this.handleClick.bind(this);是必须的,因为handleClick()函数;里用用到this指针,所以我们必须绑定this指针,如果你觉得很麻烦,官方还提供了其他两种方法

//方法一
 handleClick=>{
    alert(this.state.name+"欢迎您!");
  }
//方法二
render() {
    return <div onClick={(e)=>this.handleClick(e)}>点我</div>;
  }

上面两种方法都用到了箭头函数,因为箭头函数内部没有定义自己的this,所以当在箭头函数内部引用this时,this会绑定为父级的this,并且不能被改变。

阻止事件冒泡
react里的ev是封装过的ev对象,并不是原装的,所以有些原装的方法不行,比如事件冒泡,需要通过ev.nativeEvent.stopImmediatePropagation()实现,分析如下:
1)React为了提高效率,把事件都委托给了document,所以 e.stopPropagation() 并非是不能阻止冒泡,而是等他阻止冒泡的时侯,事件已经传递给document了,没东西可阻止了。
2)e.stopPropagation()不行,浏览器支持一个好东西,e.stopImmediatePropagation() 他不光阻止冒泡,还能阻止在当前事件触发元素上,触发其它事件。这样即使你都绑定到document上也阻止不了我了吧。
3)这样做还不行,React对原生事件封装,提供了很多好东西,但也省略了某些特性。e.stopImmediatePropagation() 就是被省略的部分,然而,他给了开口:e.nativeEvent ,从原生的事件对象里找到stopImmediatePropagation(),完活。

下节将讲述React的组件生命周期、表单、AJAX等

本文转自的大神博客:嵘么么的个人博客

时间: 2024-10-13 23:39:08

React的学习(上)的相关文章

为什么要学习React,学习React在大数据开发上有什么好处

为什么要学习React,学习React在大数据开发上有什么好处 分享之前我还是要推荐下我自己创建的大数据学习资料分享群716581014,这是全国最大的大数据学习交流的地方,2000人聚集,不管你是小白还是大牛,小编我都挺欢迎,今天的源码已经上传到群文件,不定期分享干货,包括我自己整理的一份最新的适合2018年学习和零基础入门教程,欢迎初学和进阶中的小伙伴. 如何学习React 如果你是一个 React (或者前端) 新手, 出于以下的原因, 你可能会对这个生态圈感到困惑: React 的目标群

react native 学习一(环境搭配和常见错误的解决)

react native 学习一(环境搭配) 首页,按照http://reactnative.cn/docs/0.30/getting-started.html#content上的介绍,下载安装python2.nodejs.git.Android Studio.这里前面两个都比较好装,android studio装起来相当慢,其实应该只用装sdk就行了,安装sdk可以按http://www.androiddevtools.cn/这个里面的方式设个代理. 软件装好了,就是环境变量设置了,添加AND

React Native学习(1):怎么快速学习一门新技术

React Native学习方法论 这是我技术公众号的第一篇文章,也是ReactNative系列文章的第一篇,对我的文章感兴趣的可以加我微信16230091进行关注. 本文表面上讲React Native(以下简称RN),实际上对于学习任何语言和系统都适用. 对于新技术的学习,分为两种,一种是语言,类似Swift.Objective-C.Java.ES6,另一种是系统,比如Android.iOS.前端. 1. 语言层面,如果你精通某一门语言,那么是可以很快切换到另一门语言的.这就是语言的相通性.

react简单学习路线(实用版)

学习一门新的技术之前有必要了解一下该技术在专业领域的评价,使用的领域,以及整体的学习路线,总之尽可能多的在入坑之前了解相关方面的信息.不要什么都不去查就直接学了,这个是很愚蠢的!!!!! 首先来看一篇文章,它简单讲解了学习react的流程,确实很有帮助,看完之后再开始你的学习,这样会避免走很多的弯路. http://www.jianshu.com/p/ed55b366cd96 接下来可以去http://www.runoob.com/react/react-tutorial.html 这个地方学习

李笑来老师在《把时间当作朋友》曾说过:“所有学习上的成功,都只靠两件事:策略和坚持,而坚持本身就应该是最重要的策略之一

高效编程=工具+方法+体系+专注 前面根据个人的经验,分享了一些提高编程效率的个人心得.每个人的经历经验不尽相同,相信其实每个人心中都有一份自己的清单.但最最重要的是坚持投入,不断地练习.练习.练习.练习.练习…… 这里引用最近看到的名言自我勉励一下,来自Bruce Lee李小龙: “I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,00

React Native学习-将 &#39;screen&#39;, &#39;window&#39; or a view生成图片

https://github.com/facebook/react-native/commit/ac12f986899d8520527684438f76299675dc0daa 这是react-native自带的生成图片的属性,所以使用之前只需要引用UIManager属性即可: View生成图片: state = { uri: null }; takeToImage() { UIManager.takeSnapshot(this.refs.location, {format: 'png', qu

学习上的思考与心得

由于这段时间在c语言的学习中,表现的很努力并且完成作业态度认真,所以得到了老师奖励的小黄衫. 以下是我对于c语言的学习感受与心得. 学习感受与心得 我选择计算机的这个专业,是因为我对计算机的学习很有兴趣.c语言是我以前从来没有接触过.也没有了解过的,所以当我知道要学习c语言的时候,我是有一些紧张的.当我看到书上的一堆代码,我害怕学不会,学不懂.但当我上完第一次课时,我发现c语言其实并没有想象中的那么遥远,那么不可接近,通过几次简单的实验练习,就可以记住它的大致结构.在运用c-free时,它也会提

学习上的感悟

软件工程,顾名思义,是一门用工程化的思想去开发软件的学科.它实际上是一个工程,并不是大多数人所以为的,软件工程就是开发软件这么简单,写写语言代码这么幼稚. 数学和算法以及基础课,在计算机领域中极其的重要,是我们最需要学好的!前段时间,曾经看到有篇文章,大致讲的是,现在的开发都是基于新技术.基于框架.基于封装进行开发,花时间去学数学呀,算法呀,基础课的话,真的没什么必要,因为,开发的时候,根本就用不到!说实话,从完成软件产品的角度来说的话,还真是,因为我大二做了一年的项目,所以做项目的流程也非常清

React Native学习笔记(一)Mac OS X下React Native的环境搭建

本文介绍Mac OS X系统下的React Native环境搭建过程. 1.环境要求: 1) Mac OS X操作系统 2) Xcode6.4或以上版本 3) Node.js4.0或以上版本 4) watchman和flow 2.安装过程 1) Node.js的安装可以在Node.js的官网https://nodejs.org/ 中下载最新的版本.这里下载的是node-v4.4.2.pkg版本.直接双击运行安装就可以了.查看是否安装成功可以在终端中输入如下命令: $node -v 如果能够显示版