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的更多相关文章

  1. react踩坑笔记

    1.create-react-app中配置webpack // 方法一:将项目的配置文件抽取到项目中,即运行: npm run eject // 方法二:使用react-app-rewired 2.c ...

  2. EntityFramework CodeFirst SQLServer转Oracle踩坑笔记

    接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...

  3. CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记

    CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记 cas服务器的搭建 导出证书(1和2步骤是找了课程,随便写了一下存记录,不过对于自己测试不投入使用应该不影响) C:\Users\D ...

  4. react 入坑笔记(四) - React 事件绑定和传参

    React 事件处理 建议:在了解 js 的 this 取值后食用更佳. 一.react 与 Html 中用法的异同和注意点 html 中的绑定事件的写法: <button onclick=&q ...

  5. 新版react踩坑总结

    使用es6语法与原本es5语法几个有区别的地方 1.React.creatClass与React.Component var Component = React.createClass({ rende ...

  6. ES踩坑笔记

    现在开始在业务上使用ES,记录一些踩坑经历,做点笔记. 2018-11-13 source不返回问题 使用了角色校验,客户端插入成功之后获取数据没有source,和查询参数无关. 检查mapping, ...

  7. 微信小程序使用pako.js的踩坑笔记

    问题 今天组长跟我们讨论了个问题,说是文章存储占用有点大,消耗宽带流量费,让我看看能不能找个方法解决一下(文章存储的是html字符串).第一反应是没什么头绪,能想到的就是将相同的字符串替换成一个标识之 ...

  8. Vue3.x+element-plus+ts踩坑笔记

    闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...

  9. react 入坑笔记(三) - Props

    React Props props - 参数. 组件类 React.Component 有个 defaultProps 属性,以 class xxx extend React.Component 形式 ...

随机推荐

  1. istio部署

    Istio的部署介绍 目录 Istio的部署介绍 部署模型 集群模式 单集群 多集群 网络模型 单网络 多网络 控制面模型 身份和信任模型 网格中的信任 网格之间的信任 网格模型 单网格 多网格 租户 ...

  2. 03 父子组件sync&update

    父组件传给子组件是基本数据类型. 父组件 <template> <el-container class="consele-container"> <e ...

  3. Java中nextInt和nextLine同时使用出现的问题

    代码: package com.ins1; import java.util.*; public class test { public static void main(String[] args) ...

  4. C001:打印勾

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { printf(" *\n"); p ...

  5. 软件定义网络实验(一)----Mininet源码安装和可视化拓扑工具

    一.实验任务 掌握 Mininet 的源码安装方法和 miniedit 可视化拓扑生成工具. 二.实验任务 使用源码安装 Mininet 的 2.3.0d6 版本,并使用可视化拓扑工具生成一个最简拓扑 ...

  6. 调整JavaScript抽象的迭代方案

    原文链接:Adapting JavaScript Abstractions Over Time 译者:小溪里 校对者:郭华翔.苗冬青 即使还没有读过我的文章<在处理网络数据的 JavaScrip ...

  7. Beauty Contest(POJ 2187)

    原题如下: Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 42961   Accepted:  ...

  8. Dos拒绝服务Sockstress/TearDrop 泪滴攻击(二)

    Sockstress放大攻击原理:攻击者向目标发送一个很小的流量,但是会造成产生的攻击流量是一个巨大的.成百上千倍上万倍流量被放大的一个效果,才适合作为一个拒绝服务攻击效果.(实现攻击者很小的流量打垮 ...

  9. 【吴恩达课程使用】anaconda (python 3.7) win10安装 tensorflow 1.8 cpu版

    [吴恩达课程使用]anaconda (python 3.7) win10安装 tensorflow 1.8 目前tensorflow是只支持到python3.6的,anaconda最新版本已经到pyt ...

  10. 二、Git安装--Windows

    Git安装配置 在使用Git前我们需要先安装 Git.Git 目前支持 Linux/Unix.Solaris.Mac和 Windows 平台上运行. Git 各平台安装包下载地址为:http://gi ...