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. MySQL查询操作——2

    -----------查询操作--------------------------- 查询表中的所有字段SELECT * FROM employees; 查询常量值SELECT 100;SELECT ...

  2. socks5代理转http代理

    Convert-Shadowsocks-into-an-HTTP-proxy apt-get install polipo service polipo stop polipo socksParent ...

  3. P1181 数列分段Section I

    题目描述(跳转) 对于给定的一个长度为NN的正整数数列A_iAi​,现要将其分成连续的若干段,并且每段和不超过MM(可以等于MM),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 第1 ...

  4. 解决win7无法运行bat批处理文件的方法

    在win7系统中我们可以将一些命令制作为bat批处理文件,只需双击打开即可运行命令,方便使用. 那么,要怎么运行bat批处理呢?最近有用户反馈,遇到无法运行bat批处理的现象,该怎么办呢? 修复方法一 ...

  5. SQLServer 关于 HAVING子句

    使用HAVING子句求众数 示例表 1.使用谓词 2.使用极值函数 (思考,在条件中存在聚合函数时,不可使用where,需要使用having) 使用HAVING子句求中数

  6. [硬件]_ELVE_STLINK下载出现nternal command error问题

    我之前也出现过这个这个,然后折腾一晚上,升级什么都都不好使 最后我换了一根短的线,回归正常!!!

  7. [摘译] IK: 操纵关节式物体的反向动力学和几何约束

    原文: INVERSE KINEMATICS AND GEOMETRIC CONSTRAINTS FOR ARTICULATED FIGURE MANIPULATION http://graphics ...

  8. Rocketlab公司火箭Electron介绍

    http://https://en.wikipedia.org/wiki/Rocket_Lab https://www.rocketlabusa.com/ Rocketlab(火箭实验室)是一家致力于 ...

  9. tf.Variable() 与tf.get_variable()的区别

    每次调用 tf.Variable() 都会产生一个新的变量,变量名称是一个可选参数,运行命名相同,如果命名冲突会根据命名先后对名字进行处理, tf.get_variable()的变量名称是必填参数,t ...

  10. C putchar() 和 getchar()

    C 库函数 int getchar(void)   从 终端输入获取一个字符 : 返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EO ...