小编Ele*_*erm的帖子

如何在redux中使用有状态组件?

我现在正在尝试使用redux,并且对它背后的想法非常兴奋,但是第一个真正的任务毁了整个事情.

在Redux中,我们应该存储不可变状态并生成一些reducers来进行转换.这意味着可以通过给定的先前状态和触发的动作列表来复制每个州.

但是如果我需要存储第三方/遗留有状态对象呢?例如,它可能类似于gallery或websocket客户端.我假设我能够以某种方式使用reducers来启动/停止/管理它,但是状态我不再是无状态的并且不能保证在给定的reducers列表中可重复(websocket客户端可能会生成新的会话ID,甚至是无法保持连接).

什么是解决这些问题的便捷方法?

reactjs redux

8
推荐指数
1
解决办法
2734
查看次数

如何对第三方库包装器进行单元测试?

每个人都告诉不要嘲笑你不拥有的东西.他们建议改为为第三方库创建一个包装器.

但是我该如何测试这个包装器呢?

我的意思是,如果我为它编写单元测试并且会模拟那些第三方接口来测试我的包装器,那么什么都不会改变.如果库维护者将更改其API,我将面临同样的问题 - 对于模拟库的测试将会很好,软件将在生产环境中失败.这里可靠性或可测试性的优势是什么?

我知道代码质量有优势,因为我可以随时交换这个库,但它不是这个问题的主题.

谢谢.

unit-testing

6
推荐指数
1
解决办法
2474
查看次数

为什么Docker构建如此缓慢

当我尝试在笔记本电脑上构建映像时,泊坞窗非常慢。我尝试在具有相同docker版本的虚拟机中的ubuntu中构建相同的映像,并在5秒钟内构建了它,但是在我的笔记本电脑上,它对每条语句的求值速度都慢了30倍。甚至ENV命令!

笔记本电脑使用带有Btrfs的OpenSUSE 42.2 Leap作为根文件系统,具有5400 rpm的HDD并进行了加密。我知道所有这些因素,但是它们是否如此重要,以至于我的构建需要15分钟而不是5秒?

Docker 1.13.1。

谢谢。

UPD。

不确定它是否有帮助,但是当我docker build -t test .在虚拟机上运行时,它会使用10%的4核CPU 5秒,而大量使用HDD。

但是,在笔记本电脑上,它始终使用我的4核CPU的一个内核,并且始终保持100%的速度,而HDD几乎始终保持空闲状态。

这是nmon统计信息: 在此处输入图片说明

performance docker

5
推荐指数
2
解决办法
9358
查看次数

如何根据支持的列表检查当前浏览器

我们有一个用于测试我们的 web 应用程序的浏览器列表。如果他的浏览器不受支持或测试与我们的应用程序兼容,我有一个任务通知用户。

我们browserslist在项目中有一个配置,我正在寻找一种方法来根据列表测试当前浏览器。我试过browserlist-useragent,但我们不能用的WebPack编译它,由于它使用的事实netfstls我们不希望在我们的包,包括和其他本地节点模块。

有没有更好的方法可以避免在许多不同的地方复制受支持的浏览器列表,而只使用已经存在的浏览器列表配置来检测用户是否使用受支持的浏览器?

browser browser-detection webpack

5
推荐指数
1
解决办法
1034
查看次数

打字稿足够强大吗?

这些天来,每个人都在强行打字.关于它的粉丝和文章太多了.Angular团队正在TS中制作他们的框架.但是我将ES6迁移到TS的经历非常令人失望.

我上个月尝试将相对新鲜的代码库(在ES6中编写)迁移到Typescript,并面临着大量的陷阱!

为了清楚起见,我们讨论的是带有mocha单元测试和ESLint配置的node.js应用程序(使用babel进行转换).

首先,为了支持类型检查我设置了noImplicitAny选项,得到了数百个错误并修复了它.但在那之后,我得到了打字错误,因为打字稿不了解一些node.js预定义的模块,比如stream(问题实际上更大,因为很多模块没有打字).

之后,我安装了typings- 建议替换tsd管理库d.ts文件的工具,但它的node输入定义,在解决stream问题时,添加了很多错误,因为它复制了一些预定义的类型.

另外,我发现打字稿实际上并没有将ES6的许多功能实际编译成ES5,例如生成器.它迫使我制作复杂的构建过程(TS - >(打字稿)ES6 - >(babel)ES5),这意味着我必须浪费我原来的源地图.

以上都花了很多时间来配置.

所以,我很困惑.我真的很喜欢打字稿背后的想法,但实施对我来说似乎很粗鲁.我希望我错了.

也许有人在真实项目中使用Typescript而不是HelloWorld,可以解释一下我做错了什么?

node.js tooling typescript

4
推荐指数
1
解决办法
190
查看次数

递归可观察

我正在使用RxJ,必须建立一种轮询机制才能从服务器检索更新。

我需要每秒发出一个请求,解析更新,发出请求并记住它的ID,因为我需要它来请求下一个更新包,例如getUpdate(lastId + 1)

第一部分是容易的,所以我只是用intervalmergeMap

let lastId = 0
const updates = Rx.Observable.interval(1000)
    .map(() => lastId)
    .mergeMap((offset) => getUpdates(offset + 1))
Run Code Online (Sandbox Code Playgroud)

我正在收集这样的标识符:

updates.pluck('update_id').scan(Math.max, 0).subscribe(val => lastId = val)
Run Code Online (Sandbox Code Playgroud)

但是这种解决方案不是纯粹的反应性的,我正在寻找一种方法来省略“全局”变量的使用。

我如何改进代码,同时仍然能够返回仅包含调用者更新的Observable?

UPD。

服务器对getUpdates(id)的响应如下所示:

[
  { update_id: 1, payload: { ... } },
  { update_id: 3, payload: { ... } },
  { update_id: 2, payload: { ... } }
]
Run Code Online (Sandbox Code Playgroud)

它可以按任何顺序包含0到Infinity更新

rxjs reactivex

4
推荐指数
1
解决办法
2185
查看次数