目录

一、定义变量修饰符

二、变量赋值

三、变量添加默认值

四、方法默认参数

五、import引入问题

七、获取某个dom节点

八、类型检测

九、获取路由的参数

十、页面跳转

十一、箭头函数

十二、组件间的通信


一、定义变量修饰符

1、const:定义常量时用

const name = “weishihuai”; //const表示常量,类似java的final
name = “hello weishihuai”; //编译出错,常量不能被修改,必须在定义时赋值

2、var:现在一般放在方法外部使用

var name ; //在方法中定义作为局部变量,在方法外定义作为全局变量
name = “weishihuai”; //var定义的变量可以修改,如果不初始化会输出undefined,不会报错。

3、let:局部变量尽量用let

let name = “weishihuai”; //let是块级作用域,函数内部使用let定义后,对函数外部无影响。
name = “hello” //与var的主要区别就是作用域不同

- 建议使用 let 和 const 代替 var

二、变量赋值

使用{}赋值,可同时赋值多个变量

let object = {
name:"weishihuai",
age:18,
address:"广州市科韵路天河软件园"
}let {name,age} = object;
等价于:
let name = object.name; //weishihuai
let age = object.age; //18
let address = object.address //广州市科韵路天河软件园

三、变量添加默认值

有时候,我们从state或者请求回来的object或者array为空的,直接使用 对象.属性 、数组.map() 等方法时会报undefined。这时候可以指定默认值防止报错。
具体使用方法:

let name = this.state.name || ‘weishihuai’;
等价于:
let name = this.state.name;
if (null === name || typeof name === ‘undefined’ || ‘’ === name || name.length === 0){
name = ‘weishihuai’
} else {
…
}

四、方法默认参数

function (a = 1, b){
}
等价于
function (a , b) {
if (typeof a === 'undefined'){
a = 1;
}
}

五、import引入问题

import XXX from ‘abc’ 与 import {XXX} from ‘abc’ 的区别?

  1. 如果abc.js中使用了:export default XXX,则不需要使用{},并且引入时可以自定义引入后的名字
  2. 如果abc.js中没有:export default XXX,而是:export XXX,则需要添加{},并且引入的名字必须与export的名字一致
  3. 所以我们的页面尽量添加:export default XXX 而不是:export XXX

六、组件定义方法

a). 展示型组件:(仅用于数据展示,无复杂逻辑)

示例代码:

import React from 'react';
//展示型组件(也叫无状态(state)组件)
//展示型组件的数据全都由父组件通过props传递进来,属于无状态组件
const XXX = ({props}) => {
return (
<div >
这是展示组件{props.xxx}
</div>
)
};

b). 容器型组件:(一般一个页面对应一个容器组件,里面会引入其他的展示组件作为子组件,除了数据展示还有复杂的业务逻辑)

示例代码:

import React, { Component } from 'react';
class ContainerComponent extends Component {
//定义业务逻辑
ContainerComponent(props){
super(props);
this.state = {
aaa:'aaa';
....
}
}render() {
return (
<div >
容器型组件
</div>
)
}
}

七、获取某个dom节点

a.使用ref属性获取:(推荐) this.refs.xxx

比如 <input onChange={this.setName.bind(this)} ref={'nameInput'}/>
在运行中可以通过 let nameInput = this.refs.nameInput; 获取到该input的dom节点

b.使用原生js方法获取

document.getElementById('continer')

c. react原生函数findDOMNode获取

ReactDOM.findDOMNode()

d. 使用jquery获取(不推荐)

八、类型检测

import PropTypes from 'prop-types';
XXX.propsTypes = {
name: PropTypes.string.isRequired,
hobby: PropTypes.array,
onFinish: PropTypes.func,
age: PropTypes.number,
info: PropTypes.object
};

九、获取路由的参数

  1. 路径参数(适合参数的个数固定不变的情况。比如详情页面带上id)
    1)路由格式:/detail/:id
    2)获取:let name = this.props.match.params.id

  2. 查询参数(适合参数的个数不固定的情况。比如列表页面带上查询参数)
    1)路由格式:/xxxx?key=value
    2)获取:this.props.location.search,获取到的值是?key=value格式的字符串
    3)遗憾的是,我们不能this.props.location.search.age获取到age属性值,只能获取到一个字符串。最后需要自己手动解析成可读参数

十、页面跳转

  1. 标签类型的跳转。使用Link,URL会更新,组件会被重新渲染,但是页面不会重新加载。

    1)引入Link:import {Link} from 'react-router-dom';
    2)使用:<Link to='/detail'>点我跳转到detail</Link>
    3)其中to的值就是配置的路由值
  2. js类型的跳转。

    1)跳转到新页面:this.props.history.push('/test')
    2)返回上一页:this.props.history.goBack();

十一、箭头函数

1、name => console.log(name) 或 (name) => {console.log(name)}
等价于
function(name) {
console.log(name)
}2、(a,b) => return a + b
等价于
function(a,b){
return a + b;
}

十二、组件间的通信

  1. a). 父组件 >> 子组件
//父组件
class Parent extends React.Component {
constructor(props) {
super(props);
this.state = {
name: 'weishihuai',
age: 18
};
}render() {
let {name,age} = this.state;
return (
<div >
//向子组件传递了name、age属性
<Children name={name} age={age}/>
</div>
)
}
}//子组件的定义
const Children = ({name, age}) =>{
return(
<div>
<p>子组件读取不到state中的值,但是能通过props从父组件获取</p>
<p>读取到props中的name={name},age={age}</p>
</div>
);
};//属性检查
Children.propTypes = {
name: PropTypes.string.isRequired,
age: PropTypes.number
};export default Children
  1. b). 子组件 >> 父组件

//Parent
class Parent extends React.Component {
handleChildrenData = (name) => {
console.log(name); //weishihuai
};
render() {
return (
<div>
//子组件向父组件传递值的思想:
//父组件定义一个方法用于接收子组件传递过来的值并将该方法通过props传递给子组件,在子组件调用父组件传递过去的方法即可
<Children handleDataListener={(name)=>this.handleChildrenData(name)}/>
</div>
)
}
}
export default Parent;//子组件
export default class Children extends React.Component {
render() {
//获取从父组件传递的方法
const {handleDataListener} = this.props;
return (
<div>
<Button type="primary" ghost onClick={() => handleDataListener('weishihuai')}>子组件向父组件传值</Button>
</div>
);
}
}Children.propTypes = {
exportClickListener: PropTypes.func
};

此文章为做项目时学习总结,仅供参考,一起学习,共同进步!

React使用详解(学习笔记)相关推荐

  1. TCP/IP详解学习笔记-基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  2. 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute

    TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute 分类:            TCP/IP详解学习笔记计算机网络2006-04-20 18:147970人阅读评论(1)收 ...

  3. 基础才是王道——TCP/IP详解学习笔记 这位仁兄写得太好了

    TCP/IP详解学习笔记 这位仁兄写得太好了 TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.as ...

  4. VC++深入详解学习笔记

    VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesso ...

  5. TCP/IP详解学习笔记(1)-基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  6. TCP/IP详解学习笔记

    [TCP/IP详解学习笔记(1)基本概念] 为什么会有TCP/IP协议? 计算机型号多种多样,并且运行于不同操作系统.虽然电线把计算机连接到了一起,但是这些计算机无法"交流",所以 ...

  7. TCP_IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...

  8. TCP/IP详解学习笔记 这位仁兄写得太好了.

    http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样 ...

  9. 委托(C#入门详解学习笔记)

    委托(C#入门详解学习笔记) 几个概念 什么是委托 委托的声明(自定义委托) 委托的常规使用 通用泛型委托类型的简单使用(Func和Action) 委托的高级使用 多播委托 委托的异步调用 使用接口取 ...

  10. NCBI SRA数据库使用详解----学习笔记

    NCBI SRA数据库使用详解----学习笔记 wxw060709 2019-12-25 15:58:47  1014  收藏 2 分类专栏: 生物信息学 版权 SRA(Sequence ReadAr ...

最新文章

  1. Java论坛系统 JForum
  2. Tensorflow yolov3 Intel Realsense D435 多进程multiprocessing线程池pool识别时间测试
  3. 交通银行签约第四范式,建设全行级统一AI能力平台
  4. PHP金额计算高精度函数
  5. python新旧特性过渡_网站改版时的一种新旧版过渡方案
  6. Redis持久化-数据丢失及解决
  7. Vue2 的学习经历 初识
  8. APF filter到底支持多复杂的条件
  9. c语言数据结构kmp中next计算,数据结构——关于KMP算法中next函数的详细解析
  10. 电脑数据存储工具----光盘驱动器
  11. flink离线mysql_Flink 流模式跑离线任务
  12. 程序打成jar包路径不对、找不到配置文件的解决
  13. 用友ERP-NC系统 漏洞 NCFindWeb接口任意文件下载
  14. 批量转换epub书籍为mobi电子书
  15. 技术系统进化法则包括_TRIZ理论八大技术系统进化法则.doc
  16. Moss到底算不算叛逃?
  17. JAVA面向对象(OOP)-class 类
  18. 骁龙778g相当于麒麟多少
  19. 莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)
  20. 解读:大硕德乡饮耆宾贠尚忠翁芳行碑

热门文章

  1. siteservercms 缺点_SiteServer CMS 术语大全
  2. PySpark: DataProcessing(csv file)
  3. python创建员工_Python综合练习之创建员工信息表
  4. 汇编程序实现快速排序_用Python 3实现快速排序和插入排序代码详解
  5. 432.全O(1)的数据结构
  6. 124.二叉树中的最大路径和
  7. 将梯度下降运用到线性回归
  8. 第八界中国云计算大会---简单回忆
  9. SSRF 服务器端请求伪造
  10. 使用bs4+re正则来爬取网页上需要的数据