React踩坑笔记 —— React
Webpack提供了自己的导入方式require.include,但同时也支持commonjs规范或AMD规范的require语法,而Node.js使用的就是common.js,ES6的语法Import也会被Babel转化成commonjs格式或者是AMD格式。
ES6、CommonJS的导入是单例的;
单页应用默认直接加载出所有import的资源,所以:
JS中的全局调用和表达式总会一开始就被执行,可以使用require()/import()语法实现动态加载、按需加载。可以配合Lazy(https://reactjs.org/docs/code-splitting.html#reactlazy)实现React组件懒加载 —— Lazy的原理即Promise+高阶组件,在组件异步加载完成后将解析值赋值给全局对象。
CSS样式可能会被覆盖。
一句话理解react:事件\样式\选择器,只属于真实的DOM元素,Components最终被渲染成真实DOM。
在重用社区或自定义组件的时候,如果组件没有给出样式配置的钩子(Hooks),那么我们可以在浏览器调试工具中,先找出指定元素的选择器,然后去覆盖先前样式(Style)。
在Props和State发生改变的时候,组件会发生更新,至于如何被更新,可以查看“差分算法”;
组件生命周期: 挂载、卸载发生在页面加载和路由,更新发生在Props或State改变后;
受控组件: 像表单元素这样的,有状态,并将状态控制权交给React的元素称为受控组件,受控组件必须满足两个条件:① 表单元素;② 状态被React控制(显式的value属性)。所以如果你又想给出默认值又不想将表单元素变成受控组件,请使用defaultValue给出默认值;
使用JSX语法的JS文件必须导入React ---- import React from 'react';
{}类似于eval()、模板引擎、JS``模板变量,先执行(执行模板中的表达式或调用)再渲染(将表达式运行的结果渲染出来),所以要特别注意{}中需要的是函数还是函数调用()。
使用Node.js(服务端)的包在浏览器编译,会发生错误, 所以在npm install时要注意包的使用环境。 Failed to compile Module not found: Can't resolve 'XXX' in 'xxx.lib'
在这里插入图片描述
Functions are not valid as a React child. This may happen if you return a Component instead of from render. Or maybe you meant to call this function rather than return it. 函数作为React子函数无效。 如果从render props中返回{Component}而不是,则可能会发生这种情况。 或许你打算调用这个函数而不是返回它。
React.Children.only expected to receive a single React element child.,某个组件可以通过PropTypes作类型检查,限制属性类型
MyComponent.propTypes = {
children: PropTypes.element.isRequired
};
在redux中使用combineReducers时要注意其实现原理 —— 类似于如下代码: 一般实现:
const chatReducer = (state = defaultState, action = {}) => {
return {
chatLog: chatLog(state.chatLog, action),
statusMessage: statusMessage(state.statusMessage, action),
userName: userName(state.userName, action)
}
};
combineReducers实现
const combineReducers = reducers => {
return (state = {}, action) => {
return Object.keys(reducers).reduce(
(nextState, key) => {
nextState[key] = reducers[key](state[key], action);
return nextState;
},
{}
);
};
};
无论是针对哪个属性拆分出来的子reducer,在任意dispatch发生时,都会被执行,所以定义subReducer时要注意在内部根据action.type来判断执行路径,如果这种type的action不会影响subReducer对应的state.key,那么一定要直接返回该state.key。
React踩坑笔记 —— React的更多相关文章
- react踩坑笔记
1.create-react-app中配置webpack // 方法一:将项目的配置文件抽取到项目中,即运行: npm run eject // 方法二:使用react-app-rewired 2.c ...
- EntityFramework CodeFirst SQLServer转Oracle踩坑笔记
接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...
- CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记
CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记 cas服务器的搭建 导出证书(1和2步骤是找了课程,随便写了一下存记录,不过对于自己测试不投入使用应该不影响) C:\Users\D ...
- react 入坑笔记(四) - React 事件绑定和传参
React 事件处理 建议:在了解 js 的 this 取值后食用更佳. 一.react 与 Html 中用法的异同和注意点 html 中的绑定事件的写法: <button onclick=&q ...
- 新版react踩坑总结
使用es6语法与原本es5语法几个有区别的地方 1.React.creatClass与React.Component var Component = React.createClass({ rende ...
- ES踩坑笔记
现在开始在业务上使用ES,记录一些踩坑经历,做点笔记. 2018-11-13 source不返回问题 使用了角色校验,客户端插入成功之后获取数据没有source,和查询参数无关. 检查mapping, ...
- 微信小程序使用pako.js的踩坑笔记
问题 今天组长跟我们讨论了个问题,说是文章存储占用有点大,消耗宽带流量费,让我看看能不能找个方法解决一下(文章存储的是html字符串).第一反应是没什么头绪,能想到的就是将相同的字符串替换成一个标识之 ...
- Vue3.x+element-plus+ts踩坑笔记
闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...
- react 入坑笔记(三) - Props
React Props props - 参数. 组件类 React.Component 有个 defaultProps 属性,以 class xxx extend React.Component 形式 ...
随机推荐
- openresty(nginx+lua)初识
1.新增项目配置文件: vim /usr/example/example1.conf --将以下内容加入example1.conf server { listen 80; server_name _; ...
- Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- taro-script 0.4 发布,基于Taro v3的js解释器组件
taro-script Github地址 基于Taro v3开发,支持多端小程序动态加载远程 JavaScript 脚本并执行,支持 ES5 语法 最近更新内容 新增useScriptContext获 ...
- xargs命令学习,于阮一峰博客
一.标准输入与管道命令 Unix 命令都带有参数,有些命令可以接受"标准输入"(stdin)作为参数. $ cat /etc/passwd | grep root 上面的代码使用了 ...
- 抓包工具Burp Suite安装步骤(待补充)
Burp Suite V2.1(破解版)安装步骤:(可以自行下载破解版或汉化版) 百度网盘下载地址: 链接:https://pan.baidu.com/s/1bU5JME3OsEsXrSirTdesR ...
- oracle数据库备份、还原命令及常见问题(待补充)
1.oracle数据库的备份:先查空表——将结果全选复制为insert语句——将语句执行后导出 先select 'alter table '||table_name||' allocate exten ...
- .net MVC4.0项目发布到阿里云虚拟主机中遇到的问题。
正所谓学以致用,今天本来想做个bootstrap的demo发到服务器上看一下效果,结果服务器搞了半天,最终太晚了没能学到什么东西. 首先写好页面之后我做了一个MVC4.0的网站项目,然后把Bootst ...
- JavaScript闭包函数的理解
闭包就是一个函数能够访问其函数外部作用域中的变量,即在外面可以调用函数中的函数的变量,其实他就是将函数内外部连接起来的桥梁 闭包三大特点: 1. 函数嵌套函数 2. 内部函数可以访问外部函数的变量 3 ...
- Github上如何添加 LICENSE 文件?
什么是开源软件? 开源软件是所有人都可以修改和补充的软件,因为开源软件的 license 协议允许这样做. Git版本控制系统就是开源的软件. 实际上开源软件的一个重要组成部分就是添加 license ...
- 关于JAVA的一些零碎小知识
1.经常遇到集合之间需要互相转化的 Array和List转化:Arrays.asList(数组):list.toArray(); List和Set转化:Set<String> set = ...