目录

一、定义变量修饰符

二、变量赋值

三、变量添加默认值

四、方法默认参数

五、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. 2021年大数据Spark(十二):Spark Core的RDD详解
  2. background-attachment: fixed的用法
  3. java定义一个学生类cstudent_编写一个JAVA程序片断 定义一个表示学生的类student
  4. 海康威视主机升级固件_海康威视网络广播主机DSKAM6HG1S
  5. 字节大牛教你手撕Java学习,Java核心知识点
  6. Android 百度地图开发(三)--- 实现比例尺功能和替换自带的缩放组件
  7. HLSL内置函数一览
  8. 3013C语言_输入输出
  9. 电气工程师证书如何考试拿证
  10. Gimp去除图片背景色方法
  11. Spring Web 编程详解
  12. 通过PC发送手机短信
  13. GCTA学习3 | GCTA的两篇NG:fast-LMM和fast-GLMM
  14. Revit平面视图控制
  15. Transformer在细粒度分类上的应用
  16. 2022.9.26初识c语言
  17. implement tcp bbr on ns3 (在ns3上实现TCP BBR)
  18. 分形插值matlab,分形插值算法和MATLAB实验
  19. python3.8模拟键盘自动操作环境安装
  20. #Arduino,去抖动

热门文章

  1. 算法:匹配有效的括号20. Valid Parentheses
  2. 翻译:算法常见的模数1000000007 模数10 ^ 9 + 7
  3. 算法:回溯十六 Add and Search Word添加并查找单词
  4. 438.找到字符串中所有字母异位词
  5. 计算机视觉图像去噪原理,AI笔记: 计算机视觉之图像滤波去噪: 原理、方法和效果比较...
  6. 来电通java版_Java 程序员常用的 11 款免费 IDE 编辑器
  7. 现代通信原理10.2:采用匹配滤波器的数字基带传输系统误码性能分析
  8. 【机器学习】Cross-Validation(交叉验证)详解
  9. 【CF Contest-1251 E2】Voting (Hard Version)【贪心】
  10. 【HDU 5965】扫雷【线性递推】