javascript - JavaScript 中的函数式编程 - 事件

标签 javascript events functional-programming

我已经阅读了大量关于函数式编程优点的文章,并且正在尝试编写一些代码来遵循可能被认为是函数式编程的内容。不变性、纯函数、局部状态等

我遇到的具体问题如下所示。我不确定是否有某种方法可以在不违反这些规则的情况下做我想做的事。我想我是来找答案的。

let mouseDown = false;

document.addEventListener('mousedown', () => mouseDown = true);
document.addEventListener('mouseup', () => mouseDown = false);
document.addEventListener('mousemove', e => {
  if (mouseDown) console.log({ x: e.movementX, y: e.movementY });
});

在使用 OOP 10 多年之后,我发现很难掌握 FP。然而,这不是重点。

所以,我的问题是:

  1. 是否有使用函数式编程来解决这个特定问题的更好方法?
  2. 我们是否应该担心无处不在使用函数式编程?

最佳答案

Rxjs 将适合这里的代码

http://reactivex.io/rxjs/manual/overview.html

通常您会注册事件监听器。

var button = document.querySelector('button');
button.addEventListener('click', () => console.log('Clicked!'));

使用 RxJS,您可以创建一个可观察对象。

var button = document.querySelector('button');
Rx.Observable.fromEvent(button, 'click')
  .subscribe(() => console.log('Clicked!'));

RxJS 之所以强大,是因为它能够使用纯函数生成值。这意味着您的代码不太容易出错。

纯度

var count = 0;
var button = document.querySelector('button');
button.addEventListener('click', () => console.log(`Clicked ${++count} times`));

使用 RxJS 可以隔离状态。

var button = document.querySelector('button');
Rx.Observable.fromEvent(button, 'click')
  .scan(count => count + 1, 0)
  .subscribe(count => console.log(`Clicked ${count} times`));

关于javascript - JavaScript 中的函数式编程 - 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40327325/

相关文章:

javascript - 扫描字符串中的重复值并将其删除

javascript - 停止移动设备上的 Famo.us GestureHandler 事件传播

javascript - 在 </html> 标签后放置 javascript

.net - Form_Load() 'event' 或覆盖 OnLoad()

algorithm - Haskell 中的 Maze Solver - 确定迷宫是否无法解决

architecture - 大型企业、功能性 F# 开发中通常使用什么架构模型?

javascript - 为什么我在 Sublime Text 3 中使用 node.js 设置的 JavaScript 构建器没有显示构建结果?

javascript - 如何判断 D3 强制布局何时停止

.net - 线程事件处理 (C#)

functional-programming - 为什么在Scheme中cond是一种特殊形式,而不是函数?