项目

tiptap 合作中的意识

Tiptap 协作(由 Yjs 提供动力)中的意识功能帮助你在协作空间中实时共享用户的活动信息,比如用户在线状态、光标位置和自定义用户状态。

核心而言,意识利用冲突免费复制数据类型(CRDT)确保这些共享元信息在所有用户之间保持一致且即时更新,而无需保存这些状态的历史记录。

更多关于意识的信息,可以在 Yjs 关于意识的文档 中找到。

意识提供者事件的理解

意识更新会触发特定的 提供者事件 ,以便根据用户操作和在线状态开发交互功能:

  • awarenessUpdate:表示用户活跃。这个事件会在没有实际状态变化时触发,作为“心跳”信号,告诉其他用户用户正在编辑文档。
  • awarenessChange:当意识状态有任何增删改时,这个事件会通知你,包括本地更改和远程用户的影响。

这些事件是集成自定义意识功能的钩子。

集成基础意识

在设置好 协作环境 后,就可以开始集成由协作提供者原生支持的意识功能了。

首先,用相关的信息更新意识状态。这里我们以用户名、光标颜色和鼠标位置为例。

设置意识字段

为当前用户分配一个名称、颜色和鼠标位置。这只是一个示例,你可以根据你的应用需求使用任何数据。

// 为当前用户设置意识字段
provider.setAwarenessField("user", {
  // 分享任何你想共享的信息
  name: "Kevin James",
  color: "#ffcc00",
});

监听状态变化

设置事件监听器来跟踪所有连接用户意识状态的变化:

// 监听所有用户状态的更新
provider.on("awarenessChange", ({ states }) => {
  console.log(states);
});

现在,当你继续下一步时,可以在浏览器控制台查看这些更新。

跟踪鼠标移动

接下来,我们在应用程序中添加一个事件监听器来跟踪鼠标移动,并相应地更新意识信息。

document.addEventListener("mousemove", (event) => {
  // 分享任何你想分享的信息
  provider.setAwarenessField("user", {
    name: "Kevin James",
    color: "#ffcc00",
    mouseX: event.clientX,
    mouseY: event.clientY,
  });
});

检查浏览器控制台,观察用户移动鼠标时产生的事件流。

下一步

有了基础意识,可以考虑添加 协作光标扩展 来增强你的设置。这个扩展会为你的编辑器添加光标位置、文本选择以及所有参与者的个性化细节(如姓名和颜色)。

在本文档中