精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用 Yjs + React 寫一個(gè)支持協(xié)同的 TODO 應(yīng)用

開(kāi)發(fā) 前端
Yjs 的 TypeScript 類型支持不太完善。有些類型太寬泛,比如 YMap 只能定一個(gè)類似 Map 的類型,不能傳一個(gè)特定結(jié)構(gòu)的 interface,要自己用 as 手動(dòng)強(qiáng)轉(zhuǎn)類型。

大家好,我是前端西瓜哥。

為了測(cè)試 Yjs 的協(xié)同能力,我實(shí)現(xiàn)了支持協(xié)同簡(jiǎn)單的 TODO 應(yīng)用。

支持的功能

  1. 創(chuàng)建房間;
  2. 新增、刪除、完成、清空所有待辦;
  3. 撤銷重做;
  4. 顯示其他用戶的光標(biāo)位置;

技術(shù)棧

列一下用到的技術(shù):

  1. Vite + React + TypeScript + React Router;
  2. Yjs、y-websocket:實(shí)現(xiàn)協(xié)同編輯;

源碼

源碼放 Github 上了。因?yàn)榛艘惶鞂懙暮?jiǎn)易 Demo,沒(méi)有太分模塊,代碼很稀爛,僅供參考。

https://github.com/F-star/yjs-react-todo-app。

運(yùn)行方式

先安裝依賴:

pnpm install

然后兩個(gè)終端分別啟動(dòng)服務(wù)端和客戶端:

pnpm run server
pnpm run dev

演示

簡(jiǎn)單看看效果。

創(chuàng)建一個(gè)房間。

圖片

復(fù)制這個(gè)房間鏈接,在另一個(gè)瀏覽器里打開(kāi)。

然后就是一段操作。

圖片

一些知識(shí)點(diǎn)

所有的需要同步的對(duì)象都保存在一個(gè) Y.Doc 對(duì)象下,在其下會(huì)創(chuàng)建 Yjs 的數(shù)據(jù)類型,比如 YArray、YMap。

this.ydoc = new Y.Doc();

然后我們需要一個(gè) Provider 去將這個(gè)對(duì)象的內(nèi)容同步出去,以及同步回來(lái)。

this.provider = new WebsocketProvider(wsUrl, this.roomId, this.ydoc);

模塊之間的解耦,果然還得是發(fā)布訂閱模式。通過(guò) observer 監(jiān)聽(tīng)數(shù)據(jù)的變化,然后同步到組件上。

// 創(chuàng)建頂層的 YArray 對(duì)象
this.yTodoItems = this.ydoc.getArray('todoItems');
this.yTodoItems.observe(callback);

// 拿到 YArray 對(duì)應(yīng)的普通數(shù)組對(duì)象,更新組件的內(nèi)部狀態(tài)
yjsClient.onTodoItemsChange((event) => {
  setTodoItems(event.target.toArray());
});

對(duì)于要修改一個(gè) YArray 下一個(gè)普通對(duì)象的情況,不能修改這個(gè)普通對(duì)象的屬性,它不會(huì)觸發(fā) observe 事件。我們有兩種解法。

第一種方案是從 YArray 對(duì)象下刪除對(duì)應(yīng)索引位置的對(duì)象,然后在這個(gè)地方再插入一個(gè)修改了屬性的拷貝對(duì)象。

toggleTodoItemDone(index: number) {
  // 下面的寫法無(wú)法觸發(fā) observe
  // const item = this.yTodoItems.get(index);
  // item.done = !item.done;

  // 下面的寫法可以觸發(fā) observe
  const item = this.yTodoItems.get(index);
  this.yTodoItems.delete(index, 1);
  this.yTodoItems.insert(index, [
    {
      id: item.id,
      text: item.text,
      done: !item.done,
    },
  ]);
}

第二種方案是可以將這個(gè)普通對(duì)象換成 Y.Map 對(duì)象嵌入 YArray 下,通過(guò)它的 API 修改屬性,然后用 YArray 的 observeDeep,不能再用 observe 了。

Yjs 的 TypeScript 類型支持不太完善。有些類型太寬泛,比如 YMap 只能定一個(gè)類似 Map 的類型,不能傳一個(gè)特定結(jié)構(gòu)的 interface,要自己用 as 手動(dòng)強(qiáng)轉(zhuǎn)類型。

另外,一些包的類型也無(wú)法使用,雖然我看到這個(gè)包下是有類型文件的。不知道是不是 vite 的問(wèn)題。

圖片

結(jié)尾

Yjs 確實(shí)很強(qiáng)大,只要接上 Yjs 的數(shù)據(jù)結(jié)構(gòu)類型,就能快速實(shí)現(xiàn)一個(gè)分布式的協(xié)同編輯應(yīng)用。

責(zé)任編輯:姜華 來(lái)源: 前端西瓜哥
相關(guān)推薦

2023-05-11 07:34:36

Yjs協(xié)同編輯

2023-04-07 15:45:13

Emojicode開(kāi)源編碼語(yǔ)言

2023-04-10 14:20:47

ChatGPTRESTAPI

2017-06-08 15:53:38

PythonWeb框架

2018-10-31 10:11:24

Python編程語(yǔ)言語(yǔ)音播放

2022-03-24 14:42:19

Python編程語(yǔ)言

2023-05-10 08:05:41

GoWeb應(yīng)用

2021-07-14 17:39:46

ReactRails API前端組件

2021-05-14 10:45:21

PythonNoSQL數(shù)據(jù)庫(kù)

2021-04-23 16:40:49

Three.js前端代碼

2017-05-18 12:16:03

LinuxPythonNoSql

2016-12-20 13:55:52

2021-08-04 11:55:45

Python天氣查詢PySide2

2022-10-20 11:49:49

JS動(dòng)畫幀,CSS

2017-06-20 12:48:55

React Nativ自定義模塊Note.js

2023-07-14 07:23:21

ReactuseEffect

2010-05-12 16:52:11

Oracle備份工具

2015-10-12 16:45:26

NodeWeb應(yīng)用框架

2022-10-21 14:21:46

JavaScript筆記技能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产一级不卡毛片| 欧美精品一区二区三区在线看午夜 | 亚洲成人精品视频| 日本黄色三级大片| 二区三区四区高清视频在线观看| 国产91精品久久久久久久网曝门| 欧美在线影院在线视频| 国产18无套直看片| 91成人在线精品视频| 在线看日本不卡| 欧美高清中文字幕| 91大神在线网站| 成人精品鲁一区一区二区| 国产精品h在线观看| 黄色一级视频免费观看| 狠狠色丁香婷婷综合影院| 欧美一级高清片| 国产素人在线观看| 超碰人人在线| 中文字幕欧美日韩一区| 高清国产在线一区| 一个人看的www日本高清视频| 一区免费视频| 久久国产精品影片| www亚洲色图| 欧美理伦片在线播放| 欧美久久久久中文字幕| 99999精品视频| 日韩专区av| 中文字幕一区二区三区乱码在线| 久久国产精品 国产精品| 国产成人精品毛片| 美女性感视频久久| 琪琪亚洲精品午夜在线| 国产精品成人av久久| 午夜激情久久| 在线视频国产日韩| 爱爱免费小视频| 欧美黑人做爰爽爽爽| 日韩午夜激情av| 黄大色黄女片18第一次| 另类中文字幕国产精品| 色中色一区二区| 国产中文字幕在线免费观看| 影音先锋男人资源在线| 成人免费在线观看入口| 视频在线一区二区三区| 国内精品一区视频| 久久九九国产精品| 欧美一区二区三区精美影视| 亚洲欧美一区二区三| 99久久99久久综合| 激情欧美一区二区三区中文字幕| 亚洲国产999| 国产精品一区在线| 99国产视频在线| xxxx国产精品| 成人自拍视频在线| 国产精品久久久久久久免费大片| 成人高潮片免费视频| 国产91在线|亚洲| 99国产在线观看| 日本免费网站在线观看| 91在线小视频| 蜜桃视频在线观看91| 男女视频在线观看免费| 国产三级精品视频| 婷婷久久五月天| 欧美天天影院| 一区二区三区四区高清精品免费观看| 妞干网这里只有精品| 影音先锋男人在线资源| 午夜久久久久久久久| 日韩黄色片视频| 99riav视频一区二区| 51久久夜色精品国产麻豆| 午夜视频在线网站| 白嫩白嫩国产精品| 精品视频—区二区三区免费| 自拍偷拍视频亚洲| 欧美残忍xxxx极端| 精品中文字幕在线| 欧美bbbbbbbbbbbb精品| 日韩电影在线一区| 亚洲自拍另类欧美丝袜| 少妇无码一区二区三区| 99亚偷拍自图区亚洲| 日韩国产精品一区二区| 黄色网在线看| 精品国产鲁一鲁一区二区张丽| 日韩精品一区二区三区色欲av| 色噜噜成人av在线| 亚洲精品一区二区三区精华液| 毛片网站免费观看| 天天揉久久久久亚洲精品| 久久久女人电视剧免费播放下载 | 在线免费高清一区二区三区| 国产成人综合精品| 精品国产av一区二区三区| 91片在线免费观看| 伊人久久大香线蕉成人综合网 | 日韩理论片av| 久久久久国产精品www| 免费黄色片视频| 国产超碰在线一区| 日本视频一区二区在线观看| av片在线观看免费| 日本精品一区二区三区高清 | 亚洲视频一区二区三区四区| 岛国一区二区在线观看| 一级做a爰片久久| 碰碰在线视频| 日韩欧美国产三级电影视频| 精品无码国产污污污免费网站 | 日韩免费视频| 午夜欧美大片免费观看| 亚洲最大成人在线视频| 91在线视频网址| 久久亚洲精品无码va白人极品| 日韩三区免费| 日韩av在线播放资源| 男女性高潮免费网站| 青椒成人免费视频| 免费中文日韩| 国产美女高潮在线观看| 666欧美在线视频| 五级黄高潮片90分钟视频| 好吊日精品视频| 国产在线高清精品| porn视频在线观看| 色88888久久久久久影院野外| 欧美日韩人妻精品一区在线| 欧美99在线视频观看| 成人xvideos免费视频| 久久久久久青草| 狠狠干狠狠久久| 中国黄色片视频| 欧美一区不卡| 亚洲综合在线做性| 超碰人人在线| 欧美一卡二卡三卡| 国产人与禽zoz0性伦| 日韩av一级电影| 日韩免费电影一区二区| 欧美电影免费观看网站| 亚洲毛片一区二区| 四虎成人在线观看| 91免费视频观看| 国内外成人激情视频| 伊人久久综合影院| 国产精品∨欧美精品v日韩精品| 婷婷国产在线| 色婷婷国产精品综合在线观看| 成年人网站免费在线观看| 性娇小13――14欧美| 精品中文字幕一区| 亚洲天堂导航| 亚洲欧美在线第一页| 日本视频免费观看| 中文幕一区二区三区久久蜜桃| 日韩爱爱小视频| 香港欧美日韩三级黄色一级电影网站| 国产有码一区二区| 天堂av资源在线观看| 精品国产a毛片| 国产精彩视频在线| 91丨九色porny丨蝌蚪| 欧美综合在线观看视频| 国产91一区| 国产欧美日韩中文字幕| 91在线中字| 日韩精品免费看| 羞羞色院91蜜桃| 亚洲免费观看在线观看| 成年人小视频在线观看| 国产毛片久久| 一级二级三级欧美| 国产美女撒尿一区二区| 日韩av毛片网| 精品孕妇一区二区三区| 精品久久久网站| 4438国产精品一区二区| 国产精品沙发午睡系列990531| 伊人免费视频二| 国产欧美日本| 免费观看黄色大片| 久久精品色综合| 国产精品人成电影在线观看| av香蕉成人| 亚洲美女黄色片| 99精品视频免费看| 日韩欧美精品中文字幕| 免费高清在线观看电视| 91污在线观看| 亚洲在线观看网站| 国产精品久久久免费 | 在线观看福利片| 精品一区二区免费视频| 国产精品自拍片| 欧美韩日一区| 久久riav| 一区二区在线免费播放| 国产精品va在线播放| 黄色羞羞视频在线观看| 一区二区成人av| 免费观看黄色av| 欧美久久高跟鞋激| 二区视频在线观看| 一区二区三区**美女毛片| 国产又黄又粗视频| 播五月开心婷婷综合| 男人午夜视频在线观看| 亚洲一区日韩在线| 日韩a级在线观看| 91精品国产自产拍在线观看蜜| 欧美二区三区在线| 国产精品一线| 亚洲一区中文字幕| 精品123区| 1769国内精品视频在线播放| 91小视频xxxx网站在线| 少妇高潮久久久久久潘金莲| 色综合888| 亚洲国产精久久久久久| 国产wwwwwww| 欧美久久久久久久久中文字幕| 日韩中文字幕在线观看视频| 亚洲一区二区视频在线观看| 黄色录像免费观看| 中文字幕 久热精品 视频在线| 亚洲熟妇无码av| 95精品视频在线| 中文字幕影片免费在线观看| 国产久卡久卡久卡久卡视频精品| 亚洲国产成人va在线观看麻豆| 亚洲在线日韩| 各处沟厕大尺度偷拍女厕嘘嘘| 91久久午夜| 丰满的少妇愉情hd高清果冻传媒| 午夜亚洲福利| 国产一二三四区在线观看| 99久久九九| 特级毛片在线免费观看| 99久久这里只有精品| 亚洲欧美久久234| 日韩极品一区| 中文字幕在线亚洲三区| 欧美丰满日韩| 四虎永久免费网站| 亚洲精品二区三区| 毛片在线视频观看| 国模一区二区三区| 欧美人成在线观看| 国产欧美在线| 欧美 日韩 国产 激情| 日韩精品免费视频人成| 天天影视综合色| 蜜臀精品一区二区三区在线观看| 四季av一区二区| 另类小说一区二区三区| 黄色小视频免费网站| 国精产品一区一区三区mba桃花 | 日本一区二区三区在线观看| 亚洲黄色免费视频| 国产精品久久久久久久久图文区| 男人的午夜天堂| 一区二区三区日韩欧美| 国产精品18p| 欧美性生交大片免费| 中文字幕乱伦视频| 91精品在线免费观看| 国内爆初菊对白视频| 日韩精品免费视频| 免费观看在线午夜影视| 欧美大片在线看免费观看| 美女av在线免费看| 国产精品色婷婷视频| 日本一区二区三区视频在线看| 国产麻豆乱码精品一区二区三区 | 一个人www欧美| 欧美激情黑人| 午夜精品久久久99热福利| se01亚洲视频| 69堂成人精品视频免费| 欧美1区2区3区4区| 亚洲人成人77777线观看| 欧美成人综合| 欧美日韩亚洲一| 久久99精品久久久久久国产越南 | 91香蕉视频导航| 国产91综合一区在线观看| 公肉吊粗大爽色翁浪妇视频| 亚洲你懂的在线视频| 久久国产视频播放| 欧美乱妇一区二区三区不卡视频| 亚洲免费成人网| 国产亚洲在线播放| 99在线视频影院| 国产美女精品视频| 欧美性生活一级片| 六月婷婷激情网| 日韩电影在线一区二区三区| 亚洲最大视频网| 国产精品色一区二区三区| 国产无遮挡又黄又爽在线观看| 在线观看精品一区| 日韩中文字幕免费观看| 久久精品视频在线观看| 在线人成日本视频| 99中文视频在线| 97视频热人人精品免费| 无遮挡又爽又刺激的视频| 国产精品亚洲成人| 欧美xxxx精品| 欧美性精品220| 亚洲国产精彩视频| www.精品av.com| 朝桐光一区二区| 久久精品国产一区二区三区日韩| 欧美在线二区| 在线观看日本一区二区| 久久久不卡网国产精品二区| 日本三级免费看| 日韩一区二区电影网| 免费大片在线观看www| 日本精品一区二区三区在线 | 亚洲mv在线看| 久久五月激情| 草草地址线路①屁屁影院成人| 一区二区高清免费观看影视大全 | 亚洲欧美国产另类| 国产理论在线| 精品一区二区三区国产| 日韩一级在线| 第四色在线视频| 亚洲国产一区视频| 丰满少妇一级片| 欧美高清电影在线看| 亚洲国产欧美国产第一区| 影音先锋欧美在线| 麻豆精品久久精品色综合| 能直接看的av| 欧美亚洲免费在线一区| 国产在线视频网站| 国产大片精品免费永久看nba| 五月激激激综合网色播| 成人免费aaa| 91麻豆精东视频| 中文字幕在线播| 国产亚洲欧美日韩精品| 韩国成人在线| 亚洲最新免费视频| 国产真实乱子伦精品视频| 9999热视频| 精品久久99ma| 九色porny视频在线观看| 久久精品五月婷婷| 久热国产精品| 亚洲精品成人av久久| 欧美精品乱人伦久久久久久| 国产秀色在线www免费观看| 95av在线视频| 亚洲大片av| 日韩人妻无码一区二区三区| 欧美性猛交xxxx乱大交| 国内精品一区视频| 成人免费在线视频网址| 欧美精品成人| 538国产视频| 欧美日韩综合色| caopeng在线| 精品产品国产在线不卡| 日日夜夜免费精品视频| 亚洲熟女毛茸茸| 精品久久国产老人久久综合| 久久爱91午夜羞羞| 亚洲最大免费| 成人av中文字幕| 日本熟妇一区二区三区| 日韩网站免费观看高清| 91成人噜噜噜在线播放| 97av视频在线观看| |精品福利一区二区三区| 亚洲国产精品久久人人爱潘金莲| 琪琪第一精品导航| 亚洲欧洲中文字幕| 一起草在线视频| 欧美日韩国产在线播放网站| 欧美xxxx免费虐| 五月天综合网| 丰满白嫩尤物一区二区| 日韩欧美国产另类| 色综合老司机第九色激情 | 尤物yw午夜国产精品视频| 久久av偷拍| 黄色国产小视频| 亚洲成av人片一区二区| 91网在线播放| 激情久久av| 国产老肥熟一区二区三区|