react&node必须掌握的知识点

作者: 全栈弄潮儿 | 来源:发表于2018-12-01 16:04 被阅读1次

react-router-redux

  • push(location: LocationDescriptor, state?: LocationState): RouterAction;
  • replace(location: LocationDescriptor, state?: LocationState): RouterAction;
  • go(n: number): RouterAction;
  • goBack(): RouterAction;
  • goForward(): RouterAction;

react-router按需加载

path
将匹配的路由,也就是以前的 path。

getComponent
对应于以前的 component 属性,但是这个方法是异步的,也就是当路由匹配时,才会调用这个方法。

require.ensure(dependencies, callback, chunkName)
这是 webpack 提供的方法,这也是按需加载的核心方法。第一个参数是依赖,第二个是回调函数,第三个就是上面提到的 chunkName,用来指定这个 chunk file 的 name。

如果需要返回多个子组件,则使用 getComponents 方法,将多个组件作为一个对象的属性通过 cb 返回出去即可。这个在官方示例也有,但是我们这里并不需要,而且根组件是不能返回多个子组件的,所以使用 getComponent。

indexRoute
用来设置主页,对应于以前的 <IndexRoute>。

注意这里的 indexRoute 写法, 这是个对象,在对象里面使用 getComponent。

childRoutes
这里面放置的就是子路由的配置,对应于以前的子路由们。我们将以前的 /baidu、/404 和 * 都拆了出来,接下来将分别为他们创建路由配置。

redux-thunk

Action

Action就是一个对象,一个必须带key为type的对象

Reducer

  • 纯函数,函数名次自己随便定义都可以,但是函数的参数只能是state与action,可以简单的理解为一个工厂函数,传递一个旧的state通过加工后产出一个新的state
  • 举个栗子
function count(state = 0, action) {
    switch (action.type) {
        case 'ADD':
            return state + 1;
        default:
            return state;
    }
}

Store

store是一个全局对象

将action和reducer以及state联系在一起,主要职责:

  • 维护应用的state
  • 提供getState()方法获取state
  • 提供dispatch(action)方法更新state
  • 通过subscribe(方法)注册监听器

store引用reducer
reducer引用action

使用需要引用store和action

html-webpack-plugin

利用ejs模板的语法来动态插入各自页面的thunk和css样式

eg:

<!DOCTYPE html>
<html style="font-size:20px">
<head>
<meta charset="utf-8">
<title><%= htmlWebpackPlugin.options.title %></title>
<% for (var css in htmlWebpackPlugin.files.css) { %>
<link href="<%=htmlWebpackPlugin.files.css[css] %>" rel="stylesheet">
<% } %>
</head>
<body>
<div id="app"></div>
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<script type="text/javascript" src="<%=htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
<% } %>
</body>
</html>

Promise缺点

  • 无法取消Promise,一旦新建它就会立即执行,无法中途取消
  • 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部
  • 当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)

CommonJS

  • CommonJS 用于服务器
  • CommonJS 模块就是对象,输入时必须查找对象属性
  • 这种加载称为“运行时加载”,因为只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”

es6模块

  • ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入

  • 这种加载称为“编译时加载”或者静态加载,即 ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高

  • 没法引用 ES6 模块本身,因为它不是对象

  • ES6 模块是编译时加载,使得静态分析成为可能

  • ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";

  • ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this
    优点:

  • 不再需要UMD模块格式了,将来服务器和浏览器都会支持 ES6 模块格式。目前,通过各种工具库,其实已经做到了这一点。

  • 将来浏览器的新 API就能用模块格式提供,不再必须做成全局变量或者navigator对象的属性

  • 不再需要对象作为命名空间(比如Math对象),未来这些功能可以通过模块提供

export

  • 需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系
  • export命令可以出现在模块的任何位置,只要处于模块顶层就可以

import

  • 如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名
  • 注意,import命令具有提升效果,会提升到整个模块的头部,首先执行
  • 由于import是静态执行,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构
  • 如果多次重复执行同一句import语句,那么只会执行一次,而不会执行多次
  • import语句是 Singleton 模式

import()

  • import()返回一个 Promise 对象
  • import()函数可以用在任何地方,不仅仅是模块,非模块的脚本也可以使用。它是运行时执行,也就是说,什么时候运行到这一句,就会加载指定的模块。
  • import()函数与所加载的模块没有静态连接关系,这点也是与import语句不相同
  • import()类似于 Node 的require方法,区别主要是前者是异步加载,后者是同步加载。

import()的一些适用场合

  • (1)按需加载 import()可以在需要的时候,再加载某个模块
  • (2)条件加载 import()可以放在if代码块,根据不同的情况,加载不同的模块
  • (3)动态的模块路径 import()允许模块路径动态生成
import(f())
.then(...);

Class 的静态方法

  • 类相当于实例的原型,所有在类中定义的方法,都会被实例继承。
  • 如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”
  • 注意,如果静态方法包含this关键字,这个this指的是类,而不是实例
  • 静态方法可以与非静态方法重名
  • 父类的静态方法,可以被子类继承

Class 的静态属性和实例属性

  • 静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性
class Foo {
}

Foo.prop = 1;
Foo.prop // 1
  • 目前,只有这种写法可行,因为 ES6 明确规定,Class 内部只有静态方法,没有静态属性

新提案:

  • 类的实例属性可以用等式,写入类的定义之中
class MyClass {
  myProp = 42;

  constructor() {
    console.log(this.myProp); // 42
  }
}
  • 类的静态属性只要在上面的实例属性写法前面,加上static关键字就可以了
class MyClass {
  static myStaticProp = 42;

  constructor() {
    console.log(MyClass.myStaticProp); // 42
  }
}

new.target 属性

  • 该属性一般用在构造函数之中,返回new命令作用于的那个构造函数
  • 这个属性可以用来确定构造函数是怎么调用的

module.exports与exorts的区别

  • exports是module.exports的一个引用
  • require引用模块后,返回给调用者的是module.exports而不是exports
  • exports.xxx,相当于在导出对象上挂属性,该属性对调用模块直接可见
  • exports= 相当于给exports对象重新赋值,调用模块不能访问exports对象及其属性
  • 如果此模块是一个类,就应该直接赋值module.exports,这样调用者就是一个类构造器,可以直接new实例

express中间件

  • 中间件会按照载入的顺序和地址,依次向下执行,你可以把中间件当作一个流水线

更多angular1/2/4/5、ionic1/2/3、react、vue、微信小程序、nodejs等技术文章、视频教程和开源项目,请关注微信公众号——全栈弄潮儿

微信公众号.png

前端最火框架排行榜——小程序二维码

前端排行榜.png

相关文章

网友评论

    本文标题:react&node必须掌握的知识点

    本文链接:https://www.haomeiwen.com/subject/fdkrcqtx.html