假设我正在 Redux 中编写一个应用程序,并且我的任务是使用 3rd 方库添加日志记录。它的API如下:
function createLogger(token) {
// the logger has internal state!
let logCount = 0;
return {
log(payload) {
logCount++; // modify local state
fetch('/someapi', { // ship payload to some API
method: 'POST',
body: payload
});
}
};
}
然后我会使用这样的库:
let logger = createLogger('xyz');
logger.log('foobar');
我绝对想在应用程序初始化期间只创建一次记录器实例。但接下来的问题是:我在哪里存储记录器实例?
首先是把它放在商店的某个地方。但这是个好主意吗?正如我在代码中所展示的,记录器对象是有状态的,它在闭包中存储了一个计数器。我没有像使用不可变对象那样获得新实例。众所周知,状态只能通过纯 reducer 函数进行修改。
其他可能性是在 redux 中间件闭包的某个地方创建实例,或者只是创建一个全局变量,这在可测试性方面显然是邪恶的。
对于这种(我认为)相当常见的情况,是否有最佳实践?