1.在函数式组件中使用 类型和默认值

function App({ name }) {
return (
<div>
<h1>{name}</h1>
</div>
)
} App.prototype = {
name: types.string.isRequired func / number / symbol / object
}
App.defaultProps = {
name: "wanglei1234"
}

当父组件的render函数被运行时,它的子组件render函数也会被重新执行

虚拟DOM的好处

1.性能提升了

2.它使得跨端应用得以实现(虚拟DOM不生成真实DOM,而生成原生的应用的组件)

Diff算法 比对虚拟DOM(js对象)

同级比对  +  key值比对

一致:继续比较第二层

不一致:不再进行下一步比较

好处是比对算法非常简单

为什么setState要设计成异步函数

多次短时间的操作合并成一次操作  减少比对虚拟DOM的次数

循环的时候 key的意义  比对和key值做关联

为什么key值不要设置为index

因为插入数组的时候,div的index可能变成其他div的index

导致key值不稳定,就失去了存在的意义

Redux设计和使用的三项原则

1.store是唯一的

2.只有store能够改变自己的内容

3.reducer必须是纯函数

是store拿到reducer返回的数据,然后store来进行更新的,这也是为什么reducer一定不要直接改变store里面的内容

Reducer必须是纯函数,所以里面不能有异步操作和时间相关的操作

中间指的是 action和store的中间,redux-thunk只是对dispatch的升级

background-size: contain;  表示让图片包含在div中 正常大小

&::placeholder {
color: #999;
}
改变placeholder 的字体颜色

获取动态路由参数: this.props.match.params.id

回到顶部功能

window.scrollTo(0,0)

函数式编程给测试带来了便捷

bind(this,index) 可以在bind里面传递参数

解析html    可能存在XSS攻击
<li dangerouslySetInnerHTML={{__html:item}} /> label扩大点击区域
<label htmlFor=’inputa’>输入内容</label>
<input id=”inputa” />

只要父组件的render函数重新被执行了,子组件的该函数就会被执行

//如果这个组件第一次存在父组件中,不会被执行

//如果这个组件之前已经存在于父组件中,才会被执行

registerServiceWorker的作用

PWA   progressive web application 写手机app应用,第二次访问会缓存

readux-saga

sagas文件(saga.js)一定要导出generator函数
function* getInitData(){
try{
const res = yield axios.get('/api/getList.json');
const action = initListData(res.data);
yield put(action);
}catch(e){
console.log('网络请求失败');
}
} function* mySaga() {
yield takeEvery(actionTypes.Get_Init_Data, getInitData);
}
// 后面执行的函数 可以是普通函数
export default mySaga;
import { takeEvery,put } from ‘redux-saga/effects’;
put 相当于store.dispatch()
把state 数据对象转化成immutable 对象 fromJS方法
import { fromJS } from 'immutable'; const defaultState = fromJS({ 把js对象转化成immutable对象
focused:false
}); export default (state = defaultState,action)=>{
return state.set('focused',!state.get('focused'));
}
return state;
} const mapStateToProps = (state)=>({
focused:state.header.get('focused') immutable数据调用方法
}); redux-immutable 模块的使用 yarn add redux-immutable
const mapStateToProps = (state)=>({
focused:state.header.get('focused') immutable数据调用方法
}); import { combineReducers } from 'redux';
const reducer = combineReducers({
header: HeaderReducer
});
export default reducer; 只需要把 import { combineReducers } from 'redux';
改为 import { combineReducers } from 'redux-immutable';
即可
const mapStateToProps = (state)=>({
focused:state.get(‘header’).get('focused') //immutable数据调用方法
});
也可以
const mapStateToProps = (state)=>({
focused:state.getIn([‘header’,’focused’])
});

List() 转化成不可变的  但是只能是最外层转化

里面的 list也是 immutable数组  所以不能这么改
在前面将其转化为不可变的 fromJS(data)
import { fromJS} from ‘immutable’ list.toJS() immutable 不能直接进行 下标操作

异步组件的使用  react-loadable

但是会出现问题   loader参数的组件 里面获取不到 this.props.match.params.id

因为 <Route path=”/detail/:id” component={ Writer }>  这个writer是异步组件

没有直接是组件  所以 获取不到参数

Import { withRouter } from ‘react-router-dom’

Connect()(withRouter(Writer)) 即可解决

onMouseEnter 定义该事件, onMouseLeave 移开该区域

使用styled-component 要通过innerRef 得到原始的DOM

如何在移动端调试 yarn add vconsole

所有的方法都有bind方法
历史原因this是不固定的 根据上下文来决定的
bind的作用是给这个方法绑定this

react细节的更多相关文章

  1. react中这些细节你注意过没有?

    react中的一些细节知识点: 1.组件中get的使用(作为类的getter) ES6知识:class类也有自己的getter和setter,写法如下: Class Component { const ...

  2. 深入浅出React的一些细节——State

    (来源于: https://facebook.github.io/react/docs/state-and-lifecycle.html 翻译by:@TimRChen) Using State Cor ...

  3. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  4. react 移动端 兼容性问题和一些小细节

    react 移动端 兼容性问题和一些小细节 使用 ES6 的浏览器兼容性问题 react 对低版本的安卓webview 兼容性 iOS下 fixed与软键盘的问题 onClick 阻止冒泡 meta对 ...

  5. 【react学习】关于react框架使用的一些细节要点的思考

    ( _(:3 」∠)_给园友们提个建议,无论是API文档还是书籍,一定要多看几遍!特别是隔一段时间后,会有意想不到的收获的)   这篇文章主要是写关于学习react中的一些自己的思考:   1.set ...

  6. 学习React系列(六)——更新dom细节于原理

    React更新dom的依据: 1.不同类型的elements会产生不同的树 2.通过render方法中包含key属性的子元素,开发者可以示意哪些子元素可能是稳定的. 更新过程: 一.根元素类型不同:旧 ...

  7. React对比Vue(一些小细节的差异)

    @1===>发现一个神奇的地方在对数组进行增加删除的时候 react中一个输入框点击enter键,然后数组push,然后渲染 <input ref='valInput' onKeyUp={ ...

  8. 【react】关于react框架使用的一些细节要点的思考

    ( _(:3 」∠)_给园友们提个建议,无论是API文档还是书籍,一定要多看几遍!特别是隔一段时间后,会有意想不到的收获的)   这篇文章主要是写关于学习react中的一些自己的思考:   1.set ...

  9. 关于react框架的一些细节问题的思考

    目录 setState到底是同步的还是异步的? 如何在子组件中改变父组件的state? context的运用,避免“props传递地狱” 组件类里有私有变量a,它到底改放在this.a中还是this. ...

随机推荐

  1. vue项目搭建及创建、目录结构、项目启动、全局配置

    Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...

  2. Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX

    一.窗口类结构体简介 窗口类结构体包含了窗口的各种参数信息.比如:窗口的图标.菜单栏.背景颜色.窗口的消息处理等等. 窗口类结构体有两个:WNDCLASS(早期版本) 和 WNDCLASSEX(新版本 ...

  3. ReactNative: 使用View组件创建九宫格

    一.简言 初学RN,一切皆新.View组件跟我们iOS中UIView类似,作为一个容器视图使用,它主要负责承载其他的子组件.View组件采用的是FlexBox伸缩盒子布局,通过对它的布局可以影响子组件 ...

  4. Mybatis关联查询之三

    MyBatis的关联查询之自关联 自关联 一.entity实体类 public class City { private Integer cid; private String cname; priv ...

  5. Bag of Tricks for Image Classification with Convolutional Neural Networks

    这篇文章来自李沐大神团队,使用各种CNN tricks,将原始的resnet在imagenet上提升了四个点.记录一下,可以用到自己的网络上.如果图片显示不了,点击链接观看 baseline mode ...

  6. windows 安装使用jupyter及 基础配置

    jupyter 是什么Jupyter Notebooks 是一个交互式笔记本,支持运行 40 多种编程语言,它的本质是一个 开源的 Web 应用程序,我们可以将其用于创建和共享代码与文档,他可以支持实 ...

  7. java高并发系列 - 第11天:线程中断的几种方式

    java高并发系列第11篇文章. 本文主要探讨一下中断线程的几种方式. 通过一个变量控制线程中断 代码: package com.itsoku.chat05; import java.util.con ...

  8. MyCat启动失败 Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: rebirth.a: rebirth.a: unknown error

    在使用Nactive连接MyCat的时候发现怎么连接都不ok,明明已经启动了(实际上启动失败了)! 粗心的我,后来看了下日志,果然,启动失败了 Error: Exception thrown by t ...

  9. Koa 提交和接收 JSON 表单数据

    来自 url 中的 query 参数可直接通过 context.query 获取,但 POST 方式提交的表单数据则需要借助中间件的解析来完成,比如 koa-bodyparser. 首先准备好一个表单 ...

  10. Redis设置密码,保护数据安全

    1.设置密码方法 在 redis.conf 的配置文件中修改参数 requirepass 的值为需要设置的密码, 保存配置文件后,重启Redis就可以. 建议 设置比较复杂和长的密码,防止被暴力破解. ...