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. 浅析URL(接口测试必备知识)

    笔者最近在开始接触接口测试的工作,接口测试必须了解http协议,但前提是必须要了解URL URL的定义 url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标 ...

  2. 前端上传图片回显并用base64编码,后端做解码储存,存储图片路径在.properties文件中配置(以上传身份证照片为例)

    前端页面:<form id="kycForm" enctype="multipart/form-data"> <input type=&quo ...

  3. hive最全学习线路和实践练习

    非原创,源自:https://www.cnblogs.com/snowbook/p/5723767.html hive被大多数企业使用,学习它,利于自己掌握企业所使用的技术,这里从安装使用到概念.原理 ...

  4. centos7常用命令

    系统命令 shutdown -h now # 关机 shutdown -r now # 重启 reboot # 重启 systemctl status firewalld # 查看防火墙状态 syst ...

  5. sdk(输入驱动物体 驱动属性 被驱动物体 被驱动属性 驱动数值 一键搞定驱动),当你的目标体很多展开会卡的时候使用这个

    import  maya.cmds  as  mc def   sdksomething( sdk_obj="",                    sdkAttr=" ...

  6. car的旅行路线

    https://www.luogu.org/problemnew/show/P1027 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形 ...

  7. Python循环_for&while

    格式:for x in xs['James','Lily','Candy']: print(x) —————————————————————————————————— for循环就是把每个元素代入变量 ...

  8. C#集合类型大揭秘 【转载】

    [地址]https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重要组成部分,我们 ...

  9. Ansible 安装与配置(一)

    公司大概有200多云主机需要进行管理,但是如果通过手工管理费时还累最终结果也容易出错,所以考虑通过自动化的方式来管理云主机,目前开源的自动化工具,大家用的比较多的有Ansible和Saltstack这 ...

  10. select大表报错

    MySQL查询大表报错 MySQL执行select操作时候,如果执行查询的表的数据量比较大,就会报错error code 2013.或者报错已杀死,并直接退出MySQL客户端.如下所示: mysql& ...