redux入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

subscribe函数实现

这一节我们将学习subscribe函数是如何运作的

1、ensureCanMutateNextListeners

ensureCanMutateNextListeners函数是用来确保nextListeners和currentListeners相等的

代码:

function ensureCanMutateNextListeners() {
    if (nextListeners === currentListeners) {
    nextListeners = currentListeners.slice();
      }
}

2、subscribe函数

subscribe函数作用就是将我们的监听函数push到nextListeners数组中,并将它设置为已监听状态

代码:

function subscribe(listener) {
if (typeof listener !== 'function') {
  throw new Error('Expected listener to be a function.');
}
//设置为已监听状态
var isSubscribed = true;
ensureCanMutateNextListeners();
nextListeners.push(listener);
return function unsubscribe() {
  //...
}

3、unsubscribe函数

unsubscribe函数和subscribe相反,它是将已监听状态的监听函数移出nextListeners数组

代码:

function unsubscribe() {
  if (!isSubscribed) {
    return;
  }
  isSubscribed = false;
  ensureCanMutateNextListeners();
  var index = nextListeners.indexOf(listener);
  nextListeners.splice(index, 1);
}

大家可能也发现了,在这里并没有提到我们的listener函数会在什么时候在哪里运行,下一节将具体介绍