我正在构建一个包含 HTML5 标签的 React 媒体播放器组件,<video>
我想知道该标签及其 DOM 事件如何与 Flux 架构一起使用。
在 Flux 中,组件监听的 Store 是它的真实来源,但是对于一些元素,比如<video>
标签,DOM 本身会维护一些状态,比如paused
or currentTime
。我如何协调该状态与我的商店的状态?
到目前为止,我有一个Player
组件和PlayerStore
. 当<video>
DOM 事件发生时,我一直在调度 Flux 操作,例如handlePlay
、handlePause
和handleTimeUpdate
以提供对 的更新,PlayerStore
以便商店可以保持该状态。同样,我自己的自定义播放器控件调度相同的动作,但我不确定如何“设置”<video>
元素的状态,只有当原始事件来自控件而不是<video>
事件时;即我不想陷入一个循环,例如:
<video>
发送“我的时间码已更改”DOM事件- 组件听到 DOM 事件并分派一个动作
- Store 接收到动作并使用新的时间码进行自我更新
- 监听 Store 的组件会听到更改并(以某种方式)在
<video>
元素上设置新的时间码。然而,没有理由这样做,因为<video>
元素已经知道了这个变化——它是几毫秒前首先触发它的那个!
您将如何处理这样的组件?