我正在阅读redux的源代码。
有人能帮我理解createStore下的函数吗?
它似乎实现了观察者模式的另一个版本。
问题:
我没有找到任何调用此函数的代码,为什么代码会出现在这里。目的是什么?2.如何通过存储调用此函数(密钥由Symbole生成($$observable))
function observable() {
var _ref;
var outerSubscribe = subscribe;
return _ref = {
/**
* The minimal observable subscription method.
* @param {Object} observer Any object that can be used as an observer.
* The observer object should have a `next` method.
* @returns {subscription} An object with an `unsubscribe` method that can
* be used to unsubscribe the observable from the store, and prevent further
* emission of values from the observable.
*/
subscribe: function subscribe(observer) {
if (typeof observer !== 'object') {
throw new TypeError('Expected the observer to be an object.');
}
function observeState() {
if (observer.next) {
observer.next(getState());
}
}
observeState();
var unsubscribe = outerSubscribe(observeState);
return { unsubscribe: unsubscribe };
}
}, _ref[$$observable] = function () {
return this;
}, _ref;
}
// When a store is created, an "INIT" action is dispatched so that every
// reducer returns their initial state. This effectively populates
// the initial state tree.
dispatch({ type: ActionTypes.INIT });
return _ref2 = {
dispatch: dispatch,
subscribe: subscribe,
getState: getState,
replaceReducer: replaceReducer
}, _ref2[$$observable] = observable, _ref2;
}
伪代码:
我们需要像这样的东西
var store$= store[$$observable]()
以获得可观察到的。任何想在状态更改时得到通知的人都需要进行
store$.subscribe(observer);
但是现在。我无法获得商店[$$observed]
经过几次测试:
var x = window.Symbol.for('observable');
var y = store[x];
var z = y();
console.log(x);
console.log(store[x]);
console.log("y", y);
console.log("z", z);
不要通过设置断点来查看运行时值。有时未定义。但实际上你可以使用它。
日志:
Symbol(observable)
main.tsx:138 observable() {
var _ref;
var outerSubscribe = subscribe;
return _ref = {
/**
* The minimal observable subscription method.
* @param {Object} observer Any obje…
main.tsx:139 y observable() {
var _ref;
var outerSubscribe = subscribe;
return _ref = {
/**
* The minimal observable subscription method.
* @param {Object} observer Any obje…
main.tsx:140 z Object {}subscribe: subscribe(observer)Symbol(observable): ()__proto__: Object