1. 搭建环境

  安装react脚手架  >npm install create-react-app -g

  创建文件            >create-react-app 项目名称

  启动项目            >npm start

  删除不必要文件——src文件夹里面删除,新建index.js入口文件

2. JSX的理解

  JSX的基本语法规则:遇到HTML标签(以<开头),就用HTML规则解析;遇到代码块(以{开头),就用JavaScript规则解析。

  JSX本质:写结构的语法糖,会被babel工具转成js,这个js代码运行之后会得到一个对象,这个对象是虚拟DOM(virtual DOM),并且有有type,children,描述了DOM结构。

       相对于普通对象,这个这个js是虚拟的,并且描述了DOM结构。

  JSX的作用:结构清晰,看着就是HTML的结果。ReactDOM将jsx语法转成JavaScript。

  有JSX的地方就有引入React。

//JSX
ReactDOM.render(
<div>
<p>内容一</p>
</div>,
document.getElementById('root')
); //经过babel转义之后的JavaScript
ReactDOM.render(
React.createElement(
"div",
null,
React.createElement(
"p",
null,
"\u5185\u5BB9\u4E00"
)
),
document.getElementById('root')
);

  关注点:

    1.  JSX表达式

    2. JSX嵌套

    3. JSX样式

    4. JSX属性

    5. JSX闭合标签

  {}能够渲染的元素:

    Node:包括element。比如数字、布尔值、字符串、jsx标签、array。对象不能渲染。注意array有对象元素是不能渲染的。

    element:react element        

  注意点:

    用()抱起来一个整体

    必须有只有一个父级,如果需要几个标签并行,可以引入{Fragment} from react,虚拟标签,不会被解析。

import React,{Fragment} from 'react';
import ReactDOM from 'react-dom'; let a = 1;
let b = 2;
let jsx1 = (
<h1>标题</h1>
); ReactDOM.render(
<Fragment>
<p>{a + b}</p>
<p>{`${a} ${b}`}</p>
{jsx1}
<p/>
<p style={{color:'red',marginLeft:'50'}}></p>
<p className='abc'></p>
</Fragment>,
document.getElementById('root')
);

3. 组件

  表现形式:函数式组件,类式组件

  注意:组件首字母必须大写,如果是小写开头,不解析,直接打印在浏览器的elements中。

//函数式组件,必须有return
function Parent(){
return (
<div>Parent</div>
)
}
//类式组件,必须有render方法,且有return
class Child extends Component {
render(){
return (
<div>Child</div>
)
}
}

  3.1 props

    组件的数据传递:

      函数式组件是通过参数接收;

      类式组件时通过实例的属性接收;在constructor里面是通过参数接收,并且如果不super接收props,打印的this.props是undefined;

    默认数据props:给类加defaultProp属性,值是对象

    props数据类型验证:引入prop-type。   import PT from 'prop-types';

      string
      bool
      number
      array
      object
      func
      symbol

import React from 'react';
import PT from 'prop-types';
//函数式组件必须有返回值,返回jsx
//props通过参数接收
export default function People(props){
return (
<div>
People
{props.name}
{props.abc()}
</div>
)
}
//props默认值
People.defaultProps = {
name:'--',
abc:f=>f
}
//props参数数据类型验证
People.prototype = {
name:PT.string,
abc:PT.func
}
import React,{Component} from 'react';
import People from './People';
//类式函数必须有render函数,并且函数返回值是JSX
//props通过实例的属性接收
export default class Man extends Component {
constructor(props){
super();
console.log(1,this.props);//props是空的,因为还没有挂载,需要在super里面加参数props
}
render(){
let {name} = this.props;
console.log(this.props)
return (
<div>Man
{name}
<People>Man-people</People>
</div>
)
}
}

 

 3.2 state

    什么是state:

      state是组件内部状态,视图。如果需要内容是可以修改的,就需要用到state。

    React更新视图的原理:

      就是改变state,从一个状态变成另一个状态。

    state的设置和获取:

      只有类式组件才有state,函数式组件没有state。

    state的修改的过程的理解:

      实例设置setState(this.setState是通过component继承的),合并setState;

      state修改;

      render方法执行,生产新的虚拟DOM;

      新的虚拟DOM和旧的虚拟DOM比对,找出修改的地方,将页面中变化的地方修改。

    state的特性:

      state是内容部状态—— 一个组件不同的实例,其中一个实例修改,只改变当前的实例,其他实例不修改

      setState合并更新—— 同一个事件循环调用多次setState,会先合并setState,在去修改state

      setState异步更新***—— 同修改setState之后打印state,还是之前的state,不是更新之后的state

      state更新之后马上获取state的方法

//因为setState是异步的,下面方法获取更新后的值
//方法一,存储变量
let changeNum = Math.random();
this.setState({
number : changeNum
})
console.log(changeNum); //方法二,setState内部用回调函数
this.setState({
number : Math.random()
})
this.setState((prevState,props)=>{
console.log(prevState,props) //修改之后的number
return {
name : 'mike'
}
})

4. 事件

  语法:onClick={((event)=>{})}

  事件对象的理解

    事件对象是经过包装过的合成事件对象。

  事件对象下面的属性

    nativeEvent —— 浏览器原生的事件对象
    preventDefaule —— 阻止默认事件
    stopPropagetion —— 阻止冒泡
    Target —— 事件的发生地方
    currentTarge —— 当前元素

  this的理解——将this指向实例的方法:

    1.行内 箭头函数 绑定this
      箭头函数,this是有上下文决定的

      形式:

        onClick={()=>{
        }}

    2.行内 函数bind 绑定this

      存在问题:每次点击,bind绑定this,都生产新的函数,即使state不更新,视图也会更新,影响性能。

      形式:
        onClick={(function(){
        }).bind(this)}

      改造:

        事件名(){}

        onClick={this.事件名.bind(this)}        

    3.constructe中 对事件回调函数绑定this
        constructe中:this.事件名 = this.事件名.bind(this)

        事件名(){}

        onClick={this.事件名}

    4.类属性*******

      形式:
        事件名=()=>{this}

react基础学习 一的更多相关文章

  1. react基础学习和react服务端渲染框架next.js踩坑

    说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...

  2. react基础学习

    什么是react:React(有时称为React.js 或ReactJS)是一个为数据提供渲染HTML视图的开源JavaScript库; 其特点: 声明式设计:采用声明范式,可以轻松描述应用高效:通过 ...

  3. react基础学习 三

    获取原生的DOM 注意:获取DOM是要在组件渲染之后才能被获取,所以在constructor里面获取不到原生的DOM 方法一:回调函数   推荐 方法二:createRef()   16版本,推荐 方 ...

  4. react基础学习 二——生命周期

    生命周期mount: mounting装载创建 update更新 unmounting卸载 错误捕获 注意点:生命周期函数的 作用,什么之后用 只有类式组件有生命周期,函数式组件没有生命周期 moun ...

  5. AntDesign(React)学习-3 React基础

    前面项目已经建起来了,但是没有React基础怎么办,从头学习,这个项目使用的是基于React16.X版本的几种技术集成,那么我们就从网上找一些相关的资料进行研究,我的习惯是用到哪学到哪. 一.先看一些 ...

  6. react基础(1)

    在 react入门系列 里面,介绍了一些react的基础知识,在react基础部分,会结合手脚架工具进行更多的总结. 关于webpack我在这里就不讲解了,有需要的小伙伴可以自己去百度一下学习资料,我 ...

  7. React 基础入门,基础知识介绍

    React不管在demo渲染还是UI上,都是十分方便,本人菜鸟试试学习一下,结合阮一峰老师的文章,写下一点关于自己的学习react的学习笔记,有地方不对的地方,希望各位大牛评论指出: PS:代码包下载 ...

  8. 【优质】React的学习资源

    React的学习资源 github 地址: https://github.com/LeuisKen/react-collection https://github.com/reactnativecn/ ...

  9. react native学习资料

    一:基础学习: react-native中文文档(react native中文网,人工翻译,官网完全同步)http://react-native.cn/docs/getting-started.htm ...

随机推荐

  1. Fedora 系统屏幕亮度修改

    在某些笔记本电脑上,屏幕亮度卡在最大值,功能键或桌面设置似乎没有做任何事情. 有一件事要尝试通常可以解决这个问题.打开/ etc / default / grub 并找到以GRUB_CMDLINE_L ...

  2. penn treebank的说明,包括很多语法知识

    penn数据库说明 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.9.8216&rep=rep1&type=pdf

  3. oracle数据库连接缓慢

    今天连接数据库时非常的慢,大概将近1分钟,才能连上,感觉不对,登录数据库所在的服务器,进行检查,常规的内存.硬盘.CPU全都正常,然后想要进入oracle用户时报错了:su: cannot set u ...

  4. LeetCode 136. Single Number C++ 结题报告

    136. Single Number -- Easy 解答 相同的数,XOR 等于 0,所以,将所有的数字 XOR 就可以得到只出现一次的数 class Solution { public: int ...

  5. 学习笔记DL005:线性相关、生成子空间,范数,特殊类型矩阵、向量

    线性相关.生成子空间. 逆矩阵A⁽-1⁾存在,Ax=b 每个向量b恰好存在一个解.方程组,向量b某些值,可能不存在解,或者存在无限多个解.x.y是方程组的解,z=αx+(1-α),α取任意实数. A列 ...

  6. 【缓存算法】FIFO,LFU,LRU

    一.FIFO算法 FIFO(First in First out),先进先出.其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会用到呢 ...

  7. c# 获取 com 引用真实组件地址

    1.根据guid获取 var clsid = new Guid("63EA2B90-C5A8-46F4-8A6E-2F2436C80003").ToString("B&q ...

  8. Vue字符串传入变量

  9. 事件冒泡(event bubbling)与事件捕捉(event capturing)

    事件捕捉: 单击<div>元素就会以下列顺序触发click 事件. Document => Element html => Element body => Element ...

  10. 如何长期试用Beyond Compare 4

    打开Beyond Compare 4,发现已经过了试用期   我们可以点击立即购买,购买相关的Beyond Compare 4产品,如果你已经有密钥了,可以选择使用密钥   如果还想继续试用,则找到自 ...