获取书籍热门标注
GET
/common/tencent/read/book/hot/marks
请求参数
Authorization
在 Header 添加参数
Authorization
,其值为在 Trusteeship 之后拼接 Token示例:
Authorization: Trusteeship ********************
Query 参数
bookId
string
可选
示例值:
3300028078
返回响应
🟢200成功
application/json
Body
code
integer
响应类型
result
boolean
响应真值
msg
string
系统提示
data
object
响应数据
synckey
integer
必需
totalCount
integer
必需
items
array [object {8}]
标注列表
chapters
array [object {4}]
章节列表
示例
{ "code": 200, "result": true, "msg": "热门标注获取成功 !", "data": { "synckey": 1723286482, "totalCount": 200, "items": [ { "bookId": "3300028078", "userVid": 24802225, "bookmarkId": "3300028078_6_2515-2542", "chapterUid": 6, "range": "2515-2542", "markText": "声明式代码的性能不优于命令式代码的性能。", "totalCount": 1107, "users": [ { "userVid": 301017088, "name": "小黎", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/M4dfgB8N4nepadCypm1o0vvFhP4SofQgehg1yia4ku8ic2GQibP8qXNLG01KH3uQSxJbUtXibbkrAvQpSAlUqMxhzqwkiah30bQBADKgxZBZgtsU/132" }, { "userVid": 302696449, "name": "曾昱深 Zeno", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7YAQgDGM5STR9sZibtlaB9o06HE6snWegybvy53zFTgMA/0" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" } ] }, { "bookId": "3300028078", "userVid": 36807763, "bookmarkId": "3300028078_6_4411-4472", "chapterUid": 6, "range": "4411-4472", "markText": "而所谓的虚拟 DOM,就是为了最小化找出差异这一步的性能消耗而出现的。", "totalCount": 877, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 36916736, "bookmarkId": "3300028078_6_3993-4019", "chapterUid": 6, "range": "3993-4019", "markText": "在保持可维护性的同时让性能损失最小化。", "totalCount": 869, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 213739524, "name": "Yuu", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erwcbD5Phd4gItfhgQbgHFicuMr3nnKDwyQapyOEopMfUfYYobGGfo9mvm7C9g3G4t1Rj1hfdkWeZQ/132" } ] }, { "bookId": "3300028078", "userVid": 49769141, "bookmarkId": "3300028078_8_8165-8188", "chapterUid": 8, "range": "8165-8181", "markText": "组件就是一组 DOM 元素的封装", "totalCount": 766, "users": [ { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 16152918, "name": "Y.", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/iaVmqe6CHUysFSQhwgQZHyQOEEYicRMic7MvaLiap0bvYx8/0" } ] }, { "bookId": "3300028078", "userVid": 20402881, "bookmarkId": "3300028078_7_5668-5760", "chapterUid": 7, "range": "5668-5760", "markText": "Tree-Shaking 指的就是消除那些永远不会被执行的代码,也就是排除 dead code,现在无论是 rollup.js 还是 webpack,都支持 Tree-Shaking。", "totalCount": 737, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 575308118, "name": "今晚偷月亮", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJicLDCpIe2Xr3fmZ4pW2QKgEvXwXPXfTvRkh0f3wvYQCs2o0rmvvqkDysZ8iadJDib335iap4BEAmVVCzjr3wibialjO1yxiaDmCgic9KIOdYic1J8lkQ/132" } ] }, { "bookId": "3300028078", "userVid": 596609468, "bookmarkId": "3300028078_8_13305-13439", "chapterUid": 8, "range": "13305-13439", "markText": "无论是使用模板还是直接手写渲染函数,对于一个组件来说,它要渲染的内容最终都是通过渲染函数产生的,然后渲染器再把渲染函数返回的虚拟 DOM 渲染为真实 DOM,这就是模板的工作原理,也是 Vue.js 渲染页面的流程。", "totalCount": 680, "users": [ { "userVid": 232355841, "name": "哇,被你发现了", "gender": 0, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJQaY2O1CzdYibGhYxckvDRu8gbmuTebAniaOuicch8rGpQXIv8CMWKEEKlial1juc0UDdjFwPYw2AFJQ/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 2203592, "bookmarkId": "3300028078_8_12308-12328", "chapterUid": 8, "range": "12308-12328", "markText": "编译器的作用其实就是将模板编译为渲染函数", "totalCount": 601, "users": [ { "userVid": 232355841, "name": "哇,被你发现了", "gender": 0, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJQaY2O1CzdYibGhYxckvDRu8gbmuTebAniaOuicch8rGpQXIv8CMWKEEKlial1juc0UDdjFwPYw2AFJQ/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 339453566, "bookmarkId": "3300028078_7_7701-7784", "chapterUid": 7, "range": "7701-7784", "markText": "注意注释代码 /*#__PURE__*/,其作用就是告诉 rollup.js,对于 foo 函数的调用不会产生副作用,你可以放心地对其进行 Tree-Shaking,", "totalCount": 563, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 12108004, "bookmarkId": "3300028078_7_7095-7197", "chapterUid": 7, "range": "7095-7197", "markText": "这就涉及 Tree-Shaking 中的第二个关键点——副作用。如果一个函数调用会产生副作用,那么就不能将其移除。什么是副作用?简单地说,副作用就是,当调用函数的时候会对外部产生影响,例如修改了全局变量。", "totalCount": 546, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 365895557, "bookmarkId": "3300028078_8_15579-15707", "chapterUid": 8, "range": "15579-15707", "markText": "渲染器的作用是,把虚拟 DOM 对象渲染为真实 DOM 元素。它的工作原理是,递归地遍历虚拟 DOM 对象,并调用原生 DOM API 来完成真实 DOM 的创建。渲染器的精髓在于后续的更新,它会通过 Diff 算法找出变更点,并且只会更新需要更新的内容。", "totalCount": 544, "users": [ { "userVid": 232355841, "name": "哇,被你发现了", "gender": 0, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJQaY2O1CzdYibGhYxckvDRu8gbmuTebAniaOuicch8rGpQXIv8CMWKEEKlial1juc0UDdjFwPYw2AFJQ/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 60454405, "bookmarkId": "3300028078_8_3010-3052", "chapterUid": 8, "range": "3010-3052", "markText": "而使用 JavaScript 对象来描述 UI 的方式,其实就是所谓的虚拟 DOM。", "totalCount": 532, "users": [ { "userVid": 432918677, "name": "Brad", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORM1ibeoS7icR2fibSsIKamQGP13pg8PSuGU57y2sUeDbhLPIG4GGlAFT5cWiaIicrtXic9w/0" }, { "userVid": 232355841, "name": "哇,被你发现了", "gender": 0, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJQaY2O1CzdYibGhYxckvDRu8gbmuTebAniaOuicch8rGpQXIv8CMWKEEKlial1juc0UDdjFwPYw2AFJQ/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" } ] }, { "bookId": "3300028078", "userVid": 17632610, "bookmarkId": "3300028078_6_13492-13561", "chapterUid": 6, "range": "13492-13561", "markText": "声明式的更新性能消耗 = 找出差异的性能消耗 + 直接修改的性能消耗。虚拟 DOM 的意义就在于使找出差异的性能消耗最小化。", "totalCount": 502, "users": [ { "userVid": 575308118, "name": "今晚偷月亮", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJicLDCpIe2Xr3fmZ4pW2QKgEvXwXPXfTvRkh0f3wvYQCs2o0rmvvqkDysZ8iadJDib335iap4BEAmVVCzjr3wibialjO1yxiaDmCgic9KIOdYic1J8lkQ/132" }, { "userVid": 299335686, "name": "JYT的星星将远行", "nick": "JYT的星星将远行", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0003-Cw22QsIysmUOFgdinlVtNdc/0" }, { "userVid": 597909521, "name": "雨豪", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/gwhELYibibFdRuUiaKqq9K3ia6QrAqZjH3606mE5DItAZ5g1maEiaYGLibVst0iaibTDic1gQJZNt6uOTvvo/0" } ] }, { "bookId": "3300028078", "userVid": 9347487, "bookmarkId": "3300028078_6_6079-6175", "chapterUid": 6, "range": "6079-6175", "markText": "我们可以用一个公式来表达通过 innerHTML 创建页面的性能:HTML 字符串拼接的计算量 + innerHTML 的 DOM 计算量。", "totalCount": 498, "users": [ { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 299335686, "name": "JYT的星星将远行", "nick": "JYT的星星将远行", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0003-Cw22QsIysmUOFgdinlVtNdc/0" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 370195574, "bookmarkId": "3300028078_8_4102-4127", "chapterUid": 8, "range": "4102-4127", "markText": "渲染器的作用就是把虚拟 DOM 渲染为真实 DOM", "totalCount": 491, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 21588315, "bookmarkId": "3300028078_10_1030-1079", "chapterUid": 10, "range": "1030-1079", "markText": "effect 函数的执行会直接或间接影响其他函数的执行,这时我们说 effect 函数产生了副作用", "totalCount": 474, "users": [ { "userVid": 59261371, "name": "悟", "nick": "悟", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Z3Qy4rTnCfic5YOcMicyQL6F5iaRZqFrBIskU0Ox7wvLUwPQswOD3huia6gYvmokSBL46o07KDLsYr8/0", "isV": 0, "vDesc": "悟" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 57077773, "name": "Yesterday", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epShclyYQFu3KK6so2w7qe3HjN8lAN7DtIHooUwYCGewiaj6oTDD4gLnbKydqtmuKJFzPLm2Hqj08A/132" } ] }, { "bookId": "3300028078", "userVid": 395794314, "bookmarkId": "3300028078_10_11767-11887", "chapterUid": 10, "range": "11767-11887", "markText": "WeakMap 对 key 是弱引用,不影响垃圾回收器的工作。据这个特性可知,一旦 key 被垃圾回收器回收,那么对应的键和值就访问不到了。所以 WeakMap 经常用于存储那些只有当 key 所引用的对象存在时(没有被回收)才有价值的信息", "totalCount": 469, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 312360534, "name": "馁", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/HZBn5rapf9Bf8aUJia9HFDotyUCO00NZibQAxx4QakuRsOb5CaHk9XicSOphPibVPPOpbmfM3xLtYb961c7icC4egFQ/132" } ] }, { "bookId": "3300028078", "userVid": 206420325, "bookmarkId": "3300028078_6_919-935", "chapterUid": 6, "range": "919-935", "markText": "视图层框架通常分为命令式和声明式", "totalCount": 451, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 208943122, "name": "Vic", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0014-lYc~oJjhvsrF_vKWaJwOed3/0" } ] }, { "bookId": "3300028078", "userVid": 852938, "bookmarkId": "3300028078_6_9314-9356", "chapterUid": 6, "range": "9314-9356", "markText": "当设计一个框架的时候,我们有三种选择:纯运行时的、运行时 + 编译时的或纯编译时的。", "totalCount": 451, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 352628756, "name": "查克拉克拉", "nick": "查克拉克拉", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0005-6f3wD79_xcE3oLXRpb~I_d9/0" } ] }, { "bookId": "3300028078", "userVid": 379005432, "bookmarkId": "3300028078_7_10399-10500", "chapterUid": 7, "range": "10399-10500", "markText": "无论是 rollup.js 还是 webpack,在寻找资源时,如果 package.json 中存在 module 字段,那么会优先使用 module 字段指向的资源来代替 main 字段指向的资源。", "totalCount": 429, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 37510145, "name": "随心录", "nick": "随心录", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/RtdpQ659PLPjqOIE87xLzE04rjPQAJnGMDI6RIdayz0/0", "isV": 0, "vDesc": "人生迭代工程师" } ] }, { "bookId": "3300028078", "userVid": 448258582, "bookmarkId": "3300028078_8_13650-13718", "chapterUid": 8, "range": "13650-13718", "markText": "组件的实现依赖于渲染器,模板的编译依赖于编译器", "totalCount": 416, "users": [ { "userVid": 232355841, "name": "哇,被你发现了", "gender": 0, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJQaY2O1CzdYibGhYxckvDRu8gbmuTebAniaOuicch8rGpQXIv8CMWKEEKlial1juc0UDdjFwPYw2AFJQ/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 295594502, "bookmarkId": "3300028078_6_7162-7237", "chapterUid": 6, "range": "7162-7230", "markText": "重新设置 innerHTML 属性就等价于销毁所有旧的 DOM 元素,再全量创建新的 DOM 元素", "totalCount": 392, "users": [ { "userVid": 301017088, "name": "小黎", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/M4dfgB8N4nepadCypm1o0vvFhP4SofQgehg1yia4ku8ic2GQibP8qXNLG01KH3uQSxJbUtXibbkrAvQpSAlUqMxhzqwkiah30bQBADKgxZBZgtsU/132" }, { "userVid": 36619264, "name": "zezeze", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/XxT9TiaJ1ibf2RXE8PAJkdzIKdBOLoBf4yFwSsmXkYMEKQuA7uTTacTg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 309443910, "bookmarkId": "3300028078_7_2769-2935", "chapterUid": 7, "range": "2769-2935", "markText": "在 Vue.js 3 的源码中,你可以搜索到名为 initCustomFormatter 的函数,该函数就是用来在开发环境下初始化自定义 formatter 的。以 Chrome 为例,我们可以打开 DevTools 的设置,然后勾选“Console”→“Enable custom formatters”选项,如图 2-3 所示。", "totalCount": 390, "users": [ { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 10867713, "name": "summer", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/SXryYH6DzyZU3ycmrRcdoqLuNS0xdVW6S6bQfzib4olwlBUiafsaIepw/0" }, { "userVid": 3139600, "name": "Hugh Shen", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/j8cooK2zCqppRqFyHFuxE23CwgPTD7cbIHP6bhuxrdSEM50EOFZdibg/0" } ] }, { "bookId": "3300028078", "userVid": 374177384, "bookmarkId": "3300028078_10_2989-3106", "chapterUid": 10, "range": "2989-3106", "markText": "在 ES2015 之前,只能通过 Object.defineProperty 函数实现,这也是 Vue.js 2 所采用的方式。在 ES2015+ 中,我们可以使用代理对象 Proxy 来实现,这也是 Vue.js 3 所采用的方式。", "totalCount": 370, "users": [ { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 57077773, "name": "Yesterday", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epShclyYQFu3KK6so2w7qe3HjN8lAN7DtIHooUwYCGewiaj6oTDD4gLnbKydqtmuKJFzPLm2Hqj08A/132" }, { "userVid": 405927951, "name": "adios", "nick": "adios", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJwCT4TOgUuf5BbJ4saT64mQscu3twoVamiaYgBvfwIMR4zvWK7HVVWwvuBUCAZibMxmxSOjRhMicnjvXYE3lXk4BNKhZAEeOx3DL8ficLJaMwYug/132" } ] }, { "bookId": "3300028078", "userVid": 75122449, "bookmarkId": "3300028078_8_3696-3723", "chapterUid": 8, "range": "3696-3723", "markText": "所以 h 函数就是一个辅助创建虚拟 DOM 的工具函数", "totalCount": 368, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 232355841, "name": "哇,被你发现了", "gender": 0, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJQaY2O1CzdYibGhYxckvDRu8gbmuTebAniaOuicch8rGpQXIv8CMWKEEKlial1juc0UDdjFwPYw2AFJQ/132" }, { "userVid": 13306200, "name": "Leo", "nick": "Leo", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKficJ4xG52XzD5iaNicEckr4dWibZVjRujkXlEO1JGpPUHD9nvtj3sicgMWtBNnVmDcb1cj7zfZCPQdvw/132", "isV": 0, "vDesc": "软件工程er" } ] }, { "bookId": "3300028078", "userVid": 270259946, "bookmarkId": "3300028078_8_7864-7925", "chapterUid": 8, "range": "7864-7925", "markText": "虚拟 DOM 其实就是用来描述真实 DOM 的普通 JavaScript 对象,渲染器会把这个对象渲染为真实 DOM 元素", "totalCount": 364, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 8853518, "name": "断线人偶", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLiazmfBNv7WNlr1LU0ITyYvNpI5WPv4L7XwMlCdRzI736U1X6NMsnO2Wmic5LCMqhs5kZ8Lg1s8mBA/132" } ] }, { "bookId": "3300028078", "userVid": 221189088, "bookmarkId": "3300028078_7_14312-14412", "chapterUid": 7, "range": "14312-14412", "markText": "如果明确知道自己不会使用选项 API,用户就可以使用 __VUE_OPTIONS_API__ 开关来关闭该特性,这样在打包的时候 Vue.js 的这部分代码就不会包含在最终的资源中,从而减小资源体积。", "totalCount": 357, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 10867713, "name": "summer", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/SXryYH6DzyZU3ycmrRcdoqLuNS0xdVW6S6bQfzib4olwlBUiafsaIepw/0" }, { "userVid": 346492948, "name": "快乐肥宅", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/VYY0Ea3vA5WiaWK47BHkxApPAoDmJluLsQp1F549j9icTZcWMzianltZBx5QQR0LahibmlkwbLticq9YvqzvhunPVfQ/132" } ] }, { "bookId": "3300028078", "userVid": 852938, "bookmarkId": "3300028078_10_27336-27393", "chapterUid": 10, "range": "27336-27393", "markText": "所谓可调度,指的是当 trigger 动作触发副作用函数重新执行时,有能力决定副作用函数执行的时机、次数以及方式。", "totalCount": 354, "users": [ { "userVid": 25724930, "name": "Frank", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/rQFialYmNteQpwpypc1pxYWNkxmU62TKBpwQcGGc6IibF8ibQvDk6Ypwv1F1OtwufJaVWOdwdtvV0nyKo7p9oeHjlTMdUdyvBz3frZcARKfCgg/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 13805580, "name": "🚀歸蕶🚀", "nick": "🚀歸蕶🚀", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/MaPaYg7AwkFQsIhCox7pKbfzSaLv3x2PgPR86Uf0zbjfEiccQPCnAdqBc71P6CEGKea183XUpwicn2lykDjqtepKmZwLLhUicuNbDiautGUz4NQ/132" } ] }, { "bookId": "3300028078", "userVid": 22406976, "bookmarkId": "3300028078_8_15187-15243", "chapterUid": 8, "range": "15187-15243", "markText": "编译器和渲染器之间是存在信息交流的,它们互相配合使得性能进一步提升,而它们之间交流的媒介就是虚拟 DOM 对象。", "totalCount": 349, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 8853518, "name": "断线人偶", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLiazmfBNv7WNlr1LU0ITyYvNpI5WPv4L7XwMlCdRzI736U1X6NMsnO2Wmic5LCMqhs5kZ8Lg1s8mBA/132" } ] }, { "bookId": "3300028078", "userVid": 371980872, "bookmarkId": "3300028078_6_13081-13128", "chapterUid": 6, "range": "13081-13128", "markText": "Vue.js 3 仍然保持了运行时 + 编译时的架构,在保持灵活性的基础上能够尽可能地去优化。", "totalCount": 342, "users": [ { "userVid": 302696449, "name": "曾昱深 Zeno", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7YAQgDGM5STR9sZibtlaB9o06HE6snWegybvy53zFTgMA/0" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 81205919, "bookmarkId": "3300028078_7_9094-9157", "chapterUid": 7, "range": "9094-9157", "markText": "IIFE 的全称是 Immediately Invoked Function Expression,即“立即调用的函数表达式”", "totalCount": 342, "users": [ { "userVid": 12900224, "name": "杜晓东", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/hMDDAiblhCf9cu66H4Rb6Pw9mdL6QMCY2Nj7lEYMPTRJtnjF5XqGQECj5iauVHGG4SrgffW8r0sqQIgzpn9aS3Ow/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 286787697, "bookmarkId": "3300028078_15_7139-7194", "chapterUid": 15, "range": "7139-7194", "markText": "HTML Attributes 的作用是设置与之对应的 DOM Properties 的初始值。", "totalCount": 341, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 52978559, "name": "luckier", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/EagiasBPtYbtUTh8z43WoMOI8sejJ430vBrrKC3iaPPtrfyZ4PwNeoxWyhuLoRcPaVT9VSA324Bdo/0" } ] }, { "bookId": "3300028078", "userVid": 318669093, "bookmarkId": "3300028078_10_4688-4821", "chapterUid": 10, "range": "4688-4821", "markText": "● 当读取操作发生时,将副作用函数收集到“桶”中;● 当设置操作发生时,从“桶”中取出副作用函数并执行。", "totalCount": 339, "users": [ { "userVid": 28859136, "name": "火烧云", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKSHLjejT8U2C9S4M4nyibzvoZ5eVLed7JV2mUXDaZG8Rick5Dm5I8SdJK0d048Bickiazov9CUzlWia4w/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 78943235, "name": "刘大炜", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKlXCH66JStNfQ4qfEKVzMREKjjYj71RCSO2QcVic62Y3aNKzsrEq7XqEuLVloldYtaR4icib0Q8HFHA/132" } ] }, { "bookId": "3300028078", "userVid": 25699977, "bookmarkId": "3300028078_10_19644-19725", "chapterUid": 10, "range": "19644-19725", "markText": "在调用 forEach 遍历 Set 集合时,如果一个值已经被访问过了,但该值被删除并重新添加到集合,如果此时 forEach 遍历没有结束,那么该值会重新被访问", "totalCount": 327, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 10302458, "name": "古没门", "nick": "古没门", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0006-TrS9PA_tOKW7IyNGUeOrVda/0" } ] }, { "bookId": "3300028078", "userVid": 267894533, "bookmarkId": "3300028078_8_7697-7747", "chapterUid": 8, "range": "7697-7747", "markText": "渲染器的工作原理其实很简单,归根结底,都是使用一些我们熟悉的 DOM 操作 API 来完成渲染工作。", "totalCount": 323, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 31118484, "name": "Angelia", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ZYGWajrAwzbHvRrOAClejBc8OvUnGsTzwI3Yuic8hWVsBmWicKuRwAA4YicB6H0hoibHibuWuFY37FLoJWx3twOYic8NYsPIdQaLlxWaU1qibyEicms/132" } ] }, { "bookId": "3300028078", "userVid": 296181842, "bookmarkId": "3300028078_6_7895-7961", "chapterUid": 6, "range": "7895-7961", "markText": "对于虚拟 DOM 来说,无论页面多大,都只会更新变化的内容,而对于 innerHTML 来说,页面越大,就意味着更新时的性能消耗越大", "totalCount": 321, "users": [ { "userVid": 301017088, "name": "小黎", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/M4dfgB8N4nepadCypm1o0vvFhP4SofQgehg1yia4ku8ic2GQibP8qXNLG01KH3uQSxJbUtXibbkrAvQpSAlUqMxhzqwkiah30bQBADKgxZBZgtsU/132" }, { "userVid": 407534592, "name": "nesingwary", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erT1lR55kfbdGdKb6K9thfaemfo1b8LHt4lKQdLI6mLksylS4zqBzpChiaP8iajJnMC967K2Htz9SsQ/132" }, { "userVid": 213739524, "name": "Yuu", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erwcbD5Phd4gItfhgQbgHFicuMr3nnKDwyQapyOEopMfUfYYobGGfo9mvm7C9g3G4t1Rj1hfdkWeZQ/132" } ] }, { "bookId": "3300028078", "userVid": 358547949, "bookmarkId": "3300028078_6_5571-5604", "chapterUid": 6, "range": "5571-5604", "markText": "涉及 DOM 的运算要远比JavaScript 层面的计算性能差", "totalCount": 319, "users": [ { "userVid": 410930932, "name": "钟意", "nick": "从前慢", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0006-yz9wC0VQCHa0FQ1oQqRYMe2/0", "isV": 0, "vDesc": "心在文学系的程序员" }, { "userVid": 407534592, "name": "nesingwary", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erT1lR55kfbdGdKb6K9thfaemfo1b8LHt4lKQdLI6mLksylS4zqBzpChiaP8iajJnMC967K2Htz9SsQ/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 84665044, "bookmarkId": "3300028078_7_1688-1716", "chapterUid": 7, "range": "1688-1716", "markText": "所以在框架设计和开发过程中,提供友好的警告信息至关重要。", "totalCount": 307, "users": [ { "userVid": 21932544, "name": "二丁", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/KJIG1Ivz65egQoyvbeJCdXuPpA84o9icUxKAJcDdRm3AAAsUic03zRhObicTEHAp0RpJKic9ibzgFEgp5Az4kfUZIEumXqug7GljYkgzI5TEtOb0/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" } ] }, { "bookId": "3300028078", "userVid": 15900475, "bookmarkId": "3300028078_11_1196-1317", "chapterUid": 11, "range": "1196-1317", "markText": "所谓代理,指的是对一个对象基本语义的代理。它允许我们拦截并重新定义对一个对象的基本操作", "totalCount": 286, "users": [ { "userVid": 52978559, "name": "luckier", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/EagiasBPtYbtUTh8z43WoMOI8sejJ430vBrrKC3iaPPtrfyZ4PwNeoxWyhuLoRcPaVT9VSA324Bdo/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 263862553, "name": "flying_flying_fish", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM69q3rB5BNyU60iaicOt5HPI8nIdgYaJbpBr0aIxn7ib9oee5CgdouDq3XARSJbnRjNtmCB8eq23NFLw/132" } ] }, { "bookId": "3300028078", "userVid": 407117782, "bookmarkId": "3300028078_10_15818-15864", "chapterUid": 10, "range": "15818-15864", "markText": "解决这个问题的思路很简单,每次副作用函数执行时,我们可以先把它从所有与之关联的依赖集合中删除", "totalCount": 278, "users": [ { "userVid": 318669093, "name": "ོ陈ꦿএ᭄", "nick": "ོ陈ꦿএ᭄", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaELLymdACibbhfklq7utvI9T0UibUyC1WIBibLdA6l1l4gdibhySvEI6KgCmdcV2d7TYUXYKSJVtHpepUkHnyuLtfXoYWUzDicsTnxQiaegCP8DeTKzQ/132" }, { "userVid": 269579008, "name": "泽", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/vsACyXq1DBiaiaMArwbETfDGn2NqHIGMHKLW6BpichbDcH324bxxj5ZFw/0" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" } ] }, { "bookId": "3300028078", "userVid": 40409108, "bookmarkId": "3300028078_6_7754-7795", "chapterUid": 6, "range": "7754-7795", "markText": "虚拟 DOM 在更新页面时只会更新必要的元素,但 innerHTML 需要全量更新", "totalCount": 277, "users": [ { "userVid": 301017088, "name": "小黎", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/M4dfgB8N4nepadCypm1o0vvFhP4SofQgehg1yia4ku8ic2GQibP8qXNLG01KH3uQSxJbUtXibbkrAvQpSAlUqMxhzqwkiah30bQBADKgxZBZgtsU/132" }, { "userVid": 8500224, "name": "Zen", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0014-09MWd8PuDYxK2Ni4p59HYb6/0" }, { "userVid": 251682313, "name": "栗子", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ASzcVXmk7icibCySWHokuIZITBV0r6kI324XorQWJkAEc9VL8g5XvN8AQmsCDUsPibTtFXhyPTw7lFiagsVFBjicS1g/132" } ] }, { "bookId": "3300028078", "userVid": 419816331, "bookmarkId": "3300028078_8_2341-2368", "chapterUid": 8, "range": "2341-2368", "markText": "使用 JavaScript 对象描述 UI 更加灵活。", "totalCount": 273, "users": [ { "userVid": 8500224, "name": "Zen", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0014-09MWd8PuDYxK2Ni4p59HYb6/0" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" } ] }, { "bookId": "3300028078", "userVid": 11374086, "bookmarkId": "3300028078_15_6175-6289", "chapterUid": 15, "range": "6175-6289", "markText": "实际上,HTML Attributes 的作用是设置与之对应的 DOM Properties 的初始值。一旦值改变,那么 DOM Properties 始终存储着当前值,而通过 getAttribute 函数得到的仍然是初始值。", "totalCount": 273, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 503101013, "bookmarkId": "3300028078_6_395-414", "chapterUid": 6, "range": "395-414", "markText": "“框架设计里到处都体现了权衡的艺术。”", "totalCount": 269, "users": [ { "userVid": 410930932, "name": "钟意", "nick": "从前慢", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0006-yz9wC0VQCHa0FQ1oQqRYMe2/0", "isV": 0, "vDesc": "心在文学系的程序员" }, { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" } ] }, { "bookId": "3300028078", "userVid": 59506587, "bookmarkId": "3300028078_10_26554-26597", "chapterUid": 10, "range": "26554-26597", "markText": "如果 trigger 触发执行的副作用函数与当前正在执行的副作用函数相同,则不触发执行", "totalCount": 268, "users": [ { "userVid": 318669093, "name": "ོ陈ꦿএ᭄", "nick": "ོ陈ꦿএ᭄", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaELLymdACibbhfklq7utvI9T0UibUyC1WIBibLdA6l1l4gdibhySvEI6KgCmdcV2d7TYUXYKSJVtHpepUkHnyuLtfXoYWUzDicsTnxQiaegCP8DeTKzQ/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 292061119, "bookmarkId": "3300028078_8_7344-7359", "chapterUid": 8, "range": "7344-7359", "markText": "渲染器的精髓都在更新节点的阶段", "totalCount": 267, "users": [ { "userVid": 342706634, "name": "浮小云", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqCQvUD273DfQN8mLCrR7gP9q45WjOWalgIlwdRZ2QQXdDhhiab9If3fBJ964f3DBMyWGvYAj2ODpg/132" }, { "userVid": 28859136, "name": "火烧云", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKSHLjejT8U2C9S4M4nyibzvoZ5eVLed7JV2mUXDaZG8Rick5Dm5I8SdJK0d048Bickiazov9CUzlWia4w/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" } ] }, { "bookId": "3300028078", "userVid": 18523245, "bookmarkId": "3300028078_8_11959-11989", "chapterUid": 8, "range": "11959-11989", "markText": "其实 Vue.js 中的有状态组件就是使用对象结构来表达的。", "totalCount": 259, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 218149892, "name": "向阳记笔记", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7oTgRaHMOOrEicyx9oZy2icj9AOeSalwLAEd41MhCblqGg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 56576783, "bookmarkId": "3300028078_6_598-658", "chapterUid": 6, "range": "598-658", "markText": "同样,作为学习者,我们在学习框架的时候,也应该从全局的角度对框架的设计拥有清晰的认知,否则很容易被细节困住,看不清全貌。", "totalCount": 258, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 6454972, "name": "半夜蝉鸣~~~", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0002-vQHaB3nElfe0SUksElz_zdb/0" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 416360697, "bookmarkId": "3300028078_11_8709-8757", "chapterUid": 11, "range": "8709-8757", "markText": "通过内部方法和内部槽来区分对象,例如函数对象会部署内部方法 [[Call]],而普通对象则不会。", "totalCount": 257, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 219269633, "name": "给我来点土", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/KydxAIB52xnhmdGOogueuS80GVLhOlxK2R1btHs0hz0ia7fRCumS3F25fyLXRcicAG7679s0XeBtA/0" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 42928676, "bookmarkId": "3300028078_10_6989-7015", "chapterUid": 10, "range": "6989-7015", "markText": "没有在副作用函数与被操作的目标字段之间建立明确的联系", "totalCount": 256, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 69364224, "name": "猩崽大叔", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM5micL8AhWPicibMHdR0trIwkQTSlyvqlR1lZBgU6kWicN5kg/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 244093566, "bookmarkId": "3300028078_7_11783-11935", "chapterUid": 7, "range": "11783-11935", "markText": "当进行服务端渲染时,Vue.js 的代码是在 Node.js 环境中运行的,而非浏览器环境。在 Node.js 环境中,资源的模块格式应该是 CommonJS,简称 cjs。为了能够输出 cjs 模块的资源,我们可以通过修改 rollup.config.js 的配置 format: 'cjs' 来实现:", "totalCount": 253, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 60454405, "name": "Zero", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/McYMgia19V0XCecZreyg2cmoeQDQGZtdotz7qibR2Qrc71VIj8ypRu58FQw9kZ5AR1CiavwsXQhPjo/0" } ] }, { "bookId": "3300028078", "userVid": 686825, "bookmarkId": "3300028078_14_3657-3731", "chapterUid": 14, "range": "3657-3731", "markText": "渲染器把虚拟 DOM 节点渲染为真实 DOM 节点的过程叫作挂载,通常用英文 mount 来表达", "totalCount": 252, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 294673509, "bookmarkId": "3300028078_8_14739-14783", "chapterUid": 8, "range": "14739-14783", "markText": "所以编译器能识别出哪些是静态属性,哪些是动态属性,在生成代码的时候完全可以附带这些信息:", "totalCount": 248, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 55649796, "name": "小鱼(Gary)", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/ajNVdqHZLLBkuU6uPuDtup3VsVFT71DEGs2pczIWzib5DNQpUTS0Szg/0" } ] }, { "bookId": "3300028078", "userVid": 22752507, "bookmarkId": "3300028078_11_6960-7101", "chapterUid": 11, "range": "6960-7101", "markText": "根据 ECMAScript 规范,在 JavaScript 中有两种对象,其中一种叫作常规对象(ordinary object),另一种叫作异质对象(exotic object)", "totalCount": 247, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 219269633, "name": "给我来点土", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/KydxAIB52xnhmdGOogueuS80GVLhOlxK2R1btHs0hz0ia7fRCumS3F25fyLXRcicAG7679s0XeBtA/0" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" } ] }, { "bookId": "3300028078", "userVid": 345972368, "bookmarkId": "3300028078_10_1697-1767", "chapterUid": 10, "range": "1697-1767", "markText": "这句代码修改了字段 obj.text 的值,我们希望当值变化后,副作用函数自动重新执行,如果能实现这个目标,那么对象 obj 就是响应式数据", "totalCount": 237, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 2439084, "name": "K、", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/iaz3icYUytaWwImWxSJtuUJ7K2ybmyxWfSuUzS9ZpjDU26bEIo49ib023EIQxzKeP03XiaV9zHMrwVMtUXEibjP2Q7g/132" } ] }, { "bookId": "3300028078", "userVid": 76236607, "bookmarkId": "3300028078_6_11793-11854", "chapterUid": 6, "range": "11793-11854", "markText": "准确地说,上面的代码其实是运行时编译,意思是代码运行的时候才开始编译,", "totalCount": 223, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 272077321, "name": "舒攀", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/PiajxSqBRaELTM0UWrcdBg97O5jcN0Z9h9GMUkypVQYo2WeZNCR1REQ/0" } ] }, { "bookId": "3300028078", "userVid": 55419214, "bookmarkId": "3300028078_11_3310-3371", "chapterUid": 11, "range": "3310-3371", "markText": "Reflect.get 函数还能接收第三个参数,即指定接收者 receiver,你可以把它理解为函数调用过程中的 this", "totalCount": 212, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 77864022, "name": "仨", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/bMP30ibxMl4gzqIJcnibyBFRMcQcytJVeDqR0Om9oVVUpX4xUL5hS5RzuWOjiayHtRZwCZ72IpRZNkWo1RNzzsNoA/132" }, { "userVid": 18050258, "name": "phantom", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/iaEUK3Hjb285pkV0e8kFqmO5neDISHKl9pzt1BC40Pib360OpOsgNFwTSGXRbaXChw2a3nQOSyFK8LSjnknDdialqlic6Cccv5qxqYbibCr9SlcQ/132" } ] }, { "bookId": "3300028078", "userVid": 34890016, "bookmarkId": "3300028078_10_54562-54691", "chapterUid": 10, "range": "54562-54691", "markText": "一个响应式数据最基本的实现依赖于对“读取”和“设置”操作的拦截,从而在副作用函数与响应式数据之间建立联系。当“读取”操作发生时,我们将当前执行的副作用函数存储到“桶”中;当“设置”操作发生时,再将副作用函数从“桶”里取出并执行。这就是响应系统的根本实现原理。", "totalCount": 200, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 21869720, "bookmarkId": "3300028078_11_9949-10010", "chapterUid": 11, "range": "9949-10010", "markText": "创建代理对象时指定的拦截函数,实际上是用来自定义代理对象本身的内部方法和行为的,而不是用来指定被代理对象的内部方法和行为的", "totalCount": 198, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 345554056, "bookmarkId": "3300028078_7_4152-4256", "chapterUid": 7, "range": "4152-4256", "markText": "Vue.js 使用 rollup.js 对项目进行构建,这里的 __DEV__ 常量实际上是通过 rollup.js 的插件配置来预定义的,其功能类似于 webpack 中的 DefinePlugin 插件。", "totalCount": 193, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 409445384, "name": "ice", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/PiajxSqBRaELpicSY6zt56SwMPia0BMYByUYB5JZNNOJsmgT6z88v2msQ/0" } ] }, { "bookId": "3300028078", "userVid": 18815495, "bookmarkId": "3300028078_8_774-796", "chapterUid": 8, "range": "774-796", "markText": "Vue.js 3 是一个声明式的 UI 框架", "totalCount": 189, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 3496397, "bookmarkId": "3300028078_7_17442-17496", "chapterUid": 7, "range": "17442-17496", "markText": "使用 TS 的好处有很多,如代码即文档、编辑器自动提示、一定程度上能够避免低级 bug、代码的可维护性更强等", "totalCount": 187, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" } ] }, { "bookId": "3300028078", "userVid": 40409108, "bookmarkId": "3300028078_6_12399-12475", "chapterUid": 6, "range": "12399-12475", "markText": "其实这就变成了一个纯编译时的框架,因为我们不支持任何运行时内容,用户的代码通过编译器编译后才能运行。", "totalCount": 179, "users": [ { "userVid": 21932544, "name": "二丁", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/KJIG1Ivz65egQoyvbeJCdXuPpA84o9icUxKAJcDdRm3AAAsUic03zRhObicTEHAp0RpJKic9ibzgFEgp5Az4kfUZIEumXqug7GljYkgzI5TEtOb0/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" } ] }, { "bookId": "3300028078", "userVid": 347269422, "bookmarkId": "3300028078_7_16567-16661", "chapterUid": 7, "range": "16567-16661", "markText": "registerErrorHandler 函数,用户可以使用它注册错误处理程序,然后在 callWithErrorHandling 函数内部捕获错误后,把错误传递给用户注册的错误处理程序。", "totalCount": 179, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 318669093, "bookmarkId": "3300028078_7_20065-20246", "chapterUid": 7, "range": "20065-20246", "markText": "ESM 格式的资源有两种:用于浏览器的 esm-browser.js 和用于打包工具的 esm-bundler.js。它们的区别在于对预定义常量 __DEV__ 的处理,前者直接将 __DEV__ 常量替换为字面量 true 或 false,后者则将 __DEV__ 常量替换为 process.env.NODE_ENV !== 'production' 语句。", "totalCount": 174, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 26365959, "name": "FM22", "nick": "FM22", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJtcNsQDguuooJZ0iasEwKyUia9Db3O3UtJKpjwXs7OZWbl7EPSVvy43TC65nEzafZjVTFAjr47t4cw/132" }, { "userVid": 67951362, "name": "在你说「喂」之前", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/8h9QXaJ70ibekfqYles7onC3PJkaIY7Er3yHiaVw7z5VMnkzTUbcR7aw/0" } ] }, { "bookId": "3300028078", "userVid": 221189088, "bookmarkId": "3300028078_14_3320-3382", "chapterUid": 14, "range": "3320-3382", "markText": "渲染器的作用是把虚拟 DOM 渲染为特定平台上的真实元素。在浏览器平台上,渲染器会把虚拟 DOM 渲染为真实 DOM 元素。", "totalCount": 173, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 530501403, "bookmarkId": "3300028078_10_592-617", "chapterUid": 10, "range": "592-617", "markText": "Vue.js 3 采用 Proxy 实现响应式数据", "totalCount": 165, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 416360697, "bookmarkId": "3300028078_11_2415-2470", "chapterUid": 11, "range": "2415-2463", "markText": "其实调用对象下的方法就是典型的非基本操作,我们叫它复合操作", "totalCount": 161, "users": [ { "userVid": 10302458, "name": "古没门", "nick": "古没门", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0006-TrS9PA_tOKW7IyNGUeOrVda/0" }, { "userVid": 294750977, "name": "profound-chaser", "gender": 0, "avatar": "https://res.weread.qq.com/wravatar/WV0019-wcCy2FMEDJ3z7fydD3KzFba/0" }, { "userVid": 496138, "name": "李渊", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLibgSzf26ZTIPUoNTVaNcS9wSFTyiaxfL9pTURz7yMKE0XuGBA0RSdAEAzRvyEClI0ia9icF8F6BTPZg/132" } ] }, { "bookId": "3300028078", "userVid": 5824165, "bookmarkId": "3300028078_10_8943-8971", "chapterUid": 10, "range": "8943-8971", "markText": "需要使用 WeakMap 代替 Set 作为桶的数据结构", "totalCount": 156, "users": [ { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" }, { "userVid": 251682313, "name": "栗子", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ASzcVXmk7icibCySWHokuIZITBV0r6kI324XorQWJkAEc9VL8g5XvN8AQmsCDUsPibTtFXhyPTw7lFiagsVFBjicS1g/132" }, { "userVid": 10050066, "name": "sea", "nick": "sea", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/y4u9VLsADmV0C5twjb7OBltHIc6Uy280SJdk188fjhvxsOIDiaeRQzXIGH7uvVd20wQpFbbic7HElx6mFcrodvTA/132" } ] }, { "bookId": "3300028078", "userVid": 235322149, "bookmarkId": "3300028078_10_13787-13830", "chapterUid": 10, "range": "13787-13830", "markText": "当字段 obj.ok 的值发生变化时,代码执行的分支会跟着变化,这就是所谓的分支切换。", "totalCount": 151, "users": [ { "userVid": 36099077, "name": "一帆风", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqd8cEhJCqhvfria9YjPjZctMdrLhUwyFyaRwHE0WGsZ6xhEyWhjBVdM46f0stibMhP7Ohz27Jdx41w/132" }, { "userVid": 338603526, "name": "Autubrew", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/ChCs6YSVOGWNV6k32hzibqSJoJMJnOtJYZsjLPuWkAlIXCdXoOMBXlA/0" }, { "userVid": 13805580, "name": "🚀歸蕶🚀", "nick": "🚀歸蕶🚀", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/MaPaYg7AwkFQsIhCox7pKbfzSaLv3x2PgPR86Uf0zbjfEiccQPCnAdqBc71P6CEGKea183XUpwicn2lykDjqtepKmZwLLhUicuNbDiautGUz4NQ/132" } ] }, { "bookId": "3300028078", "userVid": 256783663, "bookmarkId": "3300028078_6_10797-10848", "chapterUid": 6, "range": "10797-10848", "markText": "实际上,我们刚刚编写的框架就是一个纯运行时的框架。", "totalCount": 150, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 415430673, "name": "明明007", "nick": "明明007", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/hp3STNiaMicGgcA4JdnZhZf2rh911Ldh5OicI4jZMYzX76JYzF9VjcPNLWCicEBzfiafVZIwl1Dkq0umZSicZUfSl2Yw/132" } ] }, { "bookId": "3300028078", "userVid": 316934980, "bookmarkId": "3300028078_6_8741-8754", "chapterUid": 6, "range": "8741-8754", "markText": "心智负担、可维护性和性能。", "totalCount": 148, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 222137733, "name": "吴金存", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/WD4FduqfeKLZ5m4AHsdWUQyVtOyGOGfibibFiaVjfTktTDxpLl3sVEvdA/0" } ] }, { "bookId": "3300028078", "userVid": 318669093, "bookmarkId": "3300028078_10_2030-2190", "chapterUid": 10, "range": "2030-2190", "markText": "当副作用函数 effect 执行时,会触发字段 obj.text 的读取操作;● 当修改 obj.text 的值时,会触发字段 obj.text 的设置操作。", "totalCount": 148, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 16530947, "name": "celine", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/8iaskxGIQd1aLN6iaBC5DHVq9DoryLxHm0JT0JlFqpx03sDeAtJq4LFOgZasT11jlKQxXpdFn5zw81pbG4picdBibI3QvhJOu4OACrlW1evPVPU/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 280062133, "bookmarkId": "3300028078_11_7278-7423", "chapterUid": 11, "range": "7278-7423", "markText": "实际上,在 JavaScript 中,对象的实际语义是由对象的内部方法(internal method)指定的。所谓内部方法,指的是当我们对一个对象进行操作时在引擎内部调用的方法,这些方法对于 JavaScript 使用者来说是不可见的。", "totalCount": 147, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 246978051, "name": "诚", "nick": "诚", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaELyeNuYfGTEGxaIXDspVub4aGStB0J5gMiaD9dOwaKWtEnpfkNuibOWIRe6UiaEEFsQmAYbibXu3n4SPK5fy66ibywJ5GELGZ3xMUst1G2jL7MgSfA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 273203280, "bookmarkId": "3300028078_8_527-570", "chapterUid": 8, "range": "527-570", "markText": "框架设计讲究全局视角的把控,一个项目就算再大,也是存在一条核心思路的,并围绕核心展开。", "totalCount": 143, "users": [ { "userVid": 410930932, "name": "钟意", "nick": "从前慢", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0006-yz9wC0VQCHa0FQ1oQqRYMe2/0", "isV": 0, "vDesc": "心在文学系的程序员" }, { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 373361834, "bookmarkId": "3300028078_4_834-925", "chapterUid": 4, "range": "834-925", "markText": "Vue.js 3.0 在设计内建组件和模块时也花费了很多精力,配合构建工具以及 Tree-Shaking 机制,实现了内建能力的按需引入,从而实现了用户 bundle 的体积最小化。", "totalCount": 141, "users": [ { "userVid": 8500224, "name": "Zen", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0014-09MWd8PuDYxK2Ni4p59HYb6/0" }, { "userVid": 43425794, "name": "YYJ", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJib5QXE90JGEdfXXEK8lfq8yIzv8BX3ToHK7c68I76qd11ChOHvZDkibn9iaw9T32IvohSX1lWCU9taxYZRcFibJ7LbCMibficYibbmpibctEvPzrBmg/132" }, { "userVid": 213739524, "name": "Yuu", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erwcbD5Phd4gItfhgQbgHFicuMr3nnKDwyQapyOEopMfUfYYobGGfo9mvm7C9g3G4t1Rj1hfdkWeZQ/132" } ] }, { "bookId": "3300028078", "userVid": 289297078, "bookmarkId": "3300028078_14_5828-5910", "chapterUid": 14, "range": "5828-5910", "markText": "渲染器会使用 newVNode 与上一次渲染的 oldVNode 进行比较,试图找到并更新变更点。这个过程叫作“打补丁”(或更新),英文通常用 patch 来表达。", "totalCount": 139, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 312368129, "bookmarkId": "3300028078_7_12383-12428", "chapterUid": 7, "range": "12383-12428", "markText": "对于用户关闭的特性,我们可以利用 Tree-Shaking 机制让其不包含在最终的资源中。", "totalCount": 138, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 380958124, "name": "王珣亦", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/z3nIITkhzRgHb1vJn9ybTI2uVhfPFV3DZvObQJAQ3ia7pvy4icpHtQcklibU5yWIrX6y2vN0aWOY6LMmyXvMYc4kwib0pRRIDmvRPoLFBDiagAeA/132" } ] }, { "bookId": "3300028078", "userVid": 43006156, "bookmarkId": "3300028078_8_6817-6845", "chapterUid": 8, "range": "6817-6845", "markText": "渲染器 renderer 的实现思路,总体来说分为三步。", "totalCount": 137, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 218149892, "name": "向阳记笔记", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7oTgRaHMOOrEicyx9oZy2icj9AOeSalwLAEd41MhCblqGg/0" }, { "userVid": 213124614, "name": "二师弟", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/gDzUrxia9ibZgF2KIJx9hqfsHz7n9JjZREsArsXjMyQ14/0" } ] }, { "bookId": "3300028078", "userVid": 280710321, "bookmarkId": "3300028078_4_2066-2277", "chapterUid": 4, "range": "2066-2277", "markText": "●框架设计的核心要素以及框架设计过程中要做出的权衡;\n●三种常见的虚拟 DOM(Virtual DOM)的 Diff 算法;\n●组件化的实现与 Vue.js 内建组件的原理;\n●服务端渲染、客户端渲染、同构渲染之间的差异,以及同构渲染的原理。", "totalCount": 135, "users": [ { "userVid": 43425794, "name": "YYJ", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJib5QXE90JGEdfXXEK8lfq8yIzv8BX3ToHK7c68I76qd11ChOHvZDkibn9iaw9T32IvohSX1lWCU9taxYZRcFibJ7LbCMibficYibbmpibctEvPzrBmg/132" }, { "userVid": 251682313, "name": "栗子", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ASzcVXmk7icibCySWHokuIZITBV0r6kI324XorQWJkAEc9VL8g5XvN8AQmsCDUsPibTtFXhyPTw7lFiagsVFBjicS1g/132" }, { "userVid": 78678274, "name": "Bess", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIhibcDSf6UmIYLqh54LXmq8ngSgBjPejUibIKHeiaUSd5dW0Rib53atZkTbnQ8BfY57mCtLrLectM1mQ/132" } ] }, { "bookId": "3300028078", "userVid": 5824165, "bookmarkId": "3300028078_7_964-992", "chapterUid": 7, "range": "964-992", "markText": "衡量一个框架是否足够优秀的指标之一就是看它的开发体验如何", "totalCount": 135, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 9246297, "name": "Wangxiz", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/tf7YmxSUjNFEl62aLo7o1U2nRZeflps4zvvg6iaXk6djsEExVBpiapgwIlNHz3ufYUzE0kw8UJdGEGbaz9YiadibxA/132" } ] }, { "bookId": "3300028078", "userVid": 419426922, "bookmarkId": "3300028078_10_41644-41689", "chapterUid": 10, "range": "41644-41689", "markText": "所谓 watch,其本质就是观测一个响应式数据,当数据发生变化时通知并执行相应的回调函数。", "totalCount": 132, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 8853518, "name": "断线人偶", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLiazmfBNv7WNlr1LU0ITyYvNpI5WPv4L7XwMlCdRzI736U1X6NMsnO2Wmic5LCMqhs5kZ8Lg1s8mBA/132" } ] }, { "bookId": "3300028078", "userVid": 215702947, "bookmarkId": "3300028078_15_34658-34692", "chapterUid": 15, "range": "34658-34692", "markText": "屏蔽所有绑定时间晚于事件触发时间的事件处理函数的执行。", "totalCount": 132, "users": [ { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" } ] }, { "bookId": "3300028078", "userVid": 318669093, "bookmarkId": "3300028078_7_19009-19091", "chapterUid": 7, "range": "19009-19091", "markText": "在浏览器中运行的代码其实只有 3 行,但是全部的代码接近 200 行,其实这些代码都是在为类型支持服务。由此可见,框架想要做到完善的类型支持,需要付出相当大的努力。", "totalCount": 130, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 22944383, "bookmarkId": "3300028078_14_13821-13886", "chapterUid": 14, "range": "13821-13886", "markText": "自定义渲染器并不是“黑魔法”,它只是通过抽象的手段,让核心代码不再依赖平台特有的 API,再通过支持个性化配置的能力来实现跨平台。", "totalCount": 129, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" }, { "userVid": 496138, "name": "李渊", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLibgSzf26ZTIPUoNTVaNcS9wSFTyiaxfL9pTURz7yMKE0XuGBA0RSdAEAzRvyEClI0ia9icF8F6BTPZg/132" } ] }, { "bookId": "3300028078", "userVid": 356696161, "bookmarkId": "3300028078_15_8613-8643", "chapterUid": 15, "range": "8613-8643", "markText": "使用 setAttribute 函数设置的值总是会被字符串化", "totalCount": 129, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 3400794, "bookmarkId": "3300028078_10_459-470", "chapterUid": 10, "range": "459-470", "markText": "响应式数据和副作用函数", "totalCount": 127, "users": [ { "userVid": 28859136, "name": "火烧云", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKSHLjejT8U2C9S4M4nyibzvoZ5eVLed7JV2mUXDaZG8Rick5Dm5I8SdJK0d048Bickiazov9CUzlWia4w/132" }, { "userVid": 299815942, "name": "道", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJCibK4vibpMQlSQaMA3hsYPSDmkun2yZD4akJJtic0maAUMMtK5us5Tl0zONTSFlKVuRZze304uolqw/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 13700194, "bookmarkId": "3300028078_15_26191-26338", "chapterUid": 15, "range": "26191-26338", "markText": "在绑定事件时,我们可以绑定一个伪造的事件处理函数 invoker,然后把真正的事件处理函数设置为 invoker.value 属性的值。这样当更新事件的时候,我们将不再需要调用 removeEventListener 函数来移除上一次绑定的事件,只需要更新 invoker.value 的值即可", "totalCount": 127, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 330164258, "bookmarkId": "3300028078_18_14902-14998", "chapterUid": 18, "range": "14902-14998", "markText": "source 数组将用来存储新的一组子节点中的节点在旧的一组子节点中的位置索引,后面将会使用它计算出一个最长递增子序列,并用于辅助完成 DOM 移动的操作", "totalCount": 127, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 203521736, "bookmarkId": "3300028078_6_9150-9191", "chapterUid": 6, "range": "9150-9191", "markText": "有没有办法做到,既声明式地描述 UI,又具备原生 JavaScript 的性能呢?", "totalCount": 126, "users": [ { "userVid": 272077321, "name": "舒攀", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/PiajxSqBRaELTM0UWrcdBg97O5jcN0Z9h9GMUkypVQYo2WeZNCR1REQ/0" }, { "userVid": 346435596, "name": "豌豆荚", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/fUA9wIzPmZEwxJFLjaEwmLQdUIxxiaUQYQWxEsicmia1r1sgrxne3f9Kosuxl1E0CG14I5xeUYNO0KLDTlB3PjXNA/132" }, { "userVid": 67951362, "name": "在你说「喂」之前", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/8h9QXaJ70ibekfqYles7onC3PJkaIY7Er3yHiaVw7z5VMnkzTUbcR7aw/0" } ] }, { "bookId": "3300028078", "userVid": 320139041, "bookmarkId": "3300028078_11_9061-9312", "chapterUid": 11, "range": "9061-9312", "markText": "满足以下三点要求的对象就是常规对象:● 对于表 5-1 列出的内部方法,必须使用 ECMA 规范 10.1.x 节给出的定义实现;● 对于内部方法 [[Call]],必须使用 ECMA 规范 10.2.1 节给出的定义实现;● 对于内部方法 [[Construct]],必须使用 ECMA 规范 10.2.2 节给出的定义实现。", "totalCount": 122, "users": [ { "userVid": 219269633, "name": "给我来点土", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/KydxAIB52xnhmdGOogueuS80GVLhOlxK2R1btHs0hz0ia7fRCumS3F25fyLXRcicAG7679s0XeBtA/0" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" } ] }, { "bookId": "3300028078", "userVid": 86174399, "bookmarkId": "3300028078_14_4502-4567", "chapterUid": 14, "range": "4502-4567", "markText": "渲染器是更加宽泛的概念,它包含渲染。渲染器不仅可以用来渲染,还可以用来激活已有的 DOM 元素,这个过程通常发生在同构渲染的情况下", "totalCount": 122, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" } ] }, { "bookId": "3300028078", "userVid": 74832166, "bookmarkId": "3300028078_16_7462-7540", "chapterUid": 16, "range": "7462-7540", "markText": "key 属性就像虚拟节点的“身份证”号,只要两个虚拟节点的 type 属性值和 key 属性值都相同,那么我们就认为它们是相同的,即可以进行 DOM 的复用", "totalCount": 122, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" } ] }, { "bookId": "3300028078", "userVid": 12047940, "bookmarkId": "3300028078_11_9793-9909", "chapterUid": 11, "range": "9793-9909", "markText": "如果在创建代理对象时没有指定对应的拦截函数,例如没有指定 get() 拦截函数,那么当我们通过代理对象访问属性值时,代理对象的内部方法 [[Get]] 会调用原始对象的内部方法 [[Get]] 来获取属性值,这其实就是代理透明性质。", "totalCount": 121, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 365291017, "name": "👣", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM6Zw07LmfQsJMRxHYD5nqOF8C0dx1Y0fgzOllLPgGXJhQ/0" } ] }, { "bookId": "3300028078", "userVid": 52334176, "bookmarkId": "3300028078_7_14524-14570", "chapterUid": 7, "range": "14524-14570", "markText": "框架错误处理机制的好坏直接决定了用户应用程序的健壮性,还决定了用户开发时处理错误的心智负担。", "totalCount": 119, "users": [ { "userVid": 410930932, "name": "钟意", "nick": "从前慢", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0006-yz9wC0VQCHa0FQ1oQqRYMe2/0", "isV": 0, "vDesc": "心在文学系的程序员" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 295594502, "name": "小思", "nick": "小思", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM6oicQFYRo05RPiaXhiaLMicyibLicNXUJEajb4XkqLrbc4g0NDZu7HMZkSJxed7tlVicquzghwNqediapUxQ/132" } ] }, { "bookId": "3300028078", "userVid": 551607273, "bookmarkId": "3300028078_11_5572-5603", "chapterUid": 11, "range": "5572-5603", "markText": "在副作用函数内通过原始对象访问它的某个属性是不会建立响应联系的", "totalCount": 116, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 341373638, "bookmarkId": "3300028078_11_2960-3003", "chapterUid": 11, "range": "2960-3003", "markText": "任何在 Proxy 的拦截器中能够找到的方法,都能够在 Reflect 中找到同名函数", "totalCount": 115, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 380958124, "name": "王珣亦", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/z3nIITkhzRgHb1vJn9ybTI2uVhfPFV3DZvObQJAQ3ia7pvy4icpHtQcklibU5yWIrX6y2vN0aWOY6LMmyXvMYc4kwib0pRRIDmvRPoLFBDiagAeA/132" } ] }, { "bookId": "3300028078", "userVid": 3496397, "bookmarkId": "3300028078_7_565-612", "chapterUid": 7, "range": "565-612", "markText": "热更新(hot module replacement,HMR)需要框架层面的支持", "totalCount": 114, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 299815942, "name": "道", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJCibK4vibpMQlSQaMA3hsYPSDmkun2yZD4akJJtic0maAUMMtK5us5Tl0zONTSFlKVuRZze304uolqw/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" } ] }, { "bookId": "3300028078", "userVid": 312360534, "bookmarkId": "3300028078_11_84475-84527", "chapterUid": 11, "range": "84471-84523", "markText": "我们把响应式数据设置到原始数据上的行为称为数据污染。", "totalCount": 112, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 243693487, "bookmarkId": "3300028078_4_1264-1351", "chapterUid": 4, "range": "1264-1351", "markText": "想要使用 Proxy 实现完善的响应系统,就必须从 ECMAScript 规范入手,而 Vue.js 的模板解析器则遵从 WHATWG 的相关规范。", "totalCount": 111, "users": [ { "userVid": 30237696, "name": "青珊", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKgic0XaBPyDlGkc4wcjhdibmUzKE22bDbiaesVSAicsMfTdKic3SoPc2cxQKkN9dDicyicWOxcgwIatGdEA/132", "isV": 0, "vDesc": "敏行善知" }, { "userVid": 302696449, "name": "曾昱深 Zeno", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7YAQgDGM5STR9sZibtlaB9o06HE6snWegybvy53zFTgMA/0" }, { "userVid": 415430673, "name": "明明007", "nick": "明明007", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/hp3STNiaMicGgcA4JdnZhZf2rh911Ldh5OicI4jZMYzX76JYzF9VjcPNLWCicEBzfiafVZIwl1Dkq0umZSicZUfSl2Yw/132" } ] }, { "bookId": "3300028078", "userVid": 80509247, "bookmarkId": "3300028078_10_26309-26369", "chapterUid": 10, "range": "26309-26369", "markText": "但问题是该副作用函数正在执行中,还没有执行完毕,就要开始下一次的执行。这样会导致无限递归地调用自己,于是就产生了栈溢出。", "totalCount": 111, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 312360534, "name": "馁", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/HZBn5rapf9Bf8aUJia9HFDotyUCO00NZibQAxx4QakuRsOb5CaHk9XicSOphPibVPPOpbmfM3xLtYb961c7icC4egFQ/132" }, { "userVid": 57077773, "name": "Yesterday", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epShclyYQFu3KK6so2w7qe3HjN8lAN7DtIHooUwYCGewiaj6oTDD4gLnbKydqtmuKJFzPLm2Hqj08A/132" } ] }, { "bookId": "3300028078", "userVid": 298765187, "bookmarkId": "3300028078_10_29879-29989", "chapterUid": 10, "range": "29879-29989", "markText": "在 trigger 动作触发副作用函数执行时,我们优先判断该副作用函数是否存在调度器,如果存在,则直接调用调度器函数,并把当前副作用函数作为参数传递过去,由用户自己控制如何执行;否则保留之前的行为,即直接执行副作用函数。", "totalCount": 111, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 12631822, "bookmarkId": "3300028078_10_15101-15118", "chapterUid": 10, "range": "15101-15118", "markText": "遗留的副作用函数会导致不必要的更新", "totalCount": 110, "users": [ { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 312360534, "name": "馁", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/HZBn5rapf9Bf8aUJia9HFDotyUCO00NZibQAxx4QakuRsOb5CaHk9XicSOphPibVPPOpbmfM3xLtYb961c7icC4egFQ/132" } ] }, { "bookId": "3300028078", "userVid": 27351397, "bookmarkId": "3300028078_10_41935-41983", "chapterUid": 10, "range": "41935-41983", "markText": "watch 的实现本质上就是利用了 effect 以及 options.scheduler 选项", "totalCount": 110, "users": [ { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 63322742, "bookmarkId": "3300028078_10_36378-36465", "chapterUid": 10, "range": "36378-36465", "markText": "computed 函数的执行会返回一个对象,该对象的 value 属性是一个访问器属性,只有当读取 value 的值时,才会执行 effectFn 并将其结果作为返回值返回。", "totalCount": 108, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 391667021, "bookmarkId": "3300028078_10_51814-51877", "chapterUid": 10, "range": "51814-51877", "markText": "在 watch 内部每次检测到变更后,在副作用函数重新执行之前,会先调用我们通过 onInvalidate 函数注册的过期回调", "totalCount": 106, "users": [ { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 5749438, "bookmarkId": "3300028078_7_3653-3720", "chapterUid": 7, "range": "3653-3720", "markText": "框架的大小也是衡量框架的标准之一。在实现同样功能的情况下,当然是用的代码越少越好,这样体积就会越小,最后浏览器加载资源的时间也就越少。", "totalCount": 105, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 12626834, "bookmarkId": "3300028078_16_429-496", "chapterUid": 16, "range": "429-496", "markText": "当新旧 vnode 的子节点都是一组节点时,为了以最小的性能开销完成更新操作,需要比较两组子节点,用于比较的算法就叫作 Diff 算法", "totalCount": 105, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 22406976, "bookmarkId": "3300028078_10_55875-55919", "chapterUid": 10, "range": "55875-55919", "markText": "计算属性实际上是一个懒执行的副作用函数,我们通过 lazy 选项使得副作用函数可以懒执行", "totalCount": 104, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 563008428, "name": "scanf", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/8d5Jl1NtdSEn3WxBEO80zUzL1hibpUib5iavkDQEaGPaS6I2TsiaHhHONkfWYx7uVzfRk6Kk0pMSZe0Kp1cbw0BtVA/132" } ] }, { "bookId": "3300028078", "userVid": 520528, "bookmarkId": "3300028078_10_5606-5728", "chapterUid": 10, "range": "5606-5728", "markText": "当 effect 函数执行时,首先会把匿名的副作用函数 fn 赋值给全局变量 activeEffect。接着执行被注册的匿名副作用函数 fn,这将会触发响应式数据 obj.text 的读取操作,进而触发代理对象 Proxy 的 get 拦截函数", "totalCount": 103, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 50400259, "name": "Loya", "nick": "Loya", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/R68krDMHXro561gU7NaPTvQckwOnFUQLmkMeofcWLSZDeZrt2LzAvRXrH4LXMBapb8eRu0cjWbqD79NrPSRh7w/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 348314859, "bookmarkId": "3300028078_7_763-782", "chapterUid": 7, "range": "763-782", "markText": "rollup.js 和 webpack", "totalCount": 102, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 448166744, "name": "sleep", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/s8z9o2IXBDPiakyyMRbHrDHMeavRicGsEg9grhyZ45C0b6E8Nt9fMdcs2aHcp2ZWm18GQ7nzDhnBaZQEoiaBlZPnjwnkrlblDsKRSn9I9T9VdA/132" } ] }, { "bookId": "3300028078", "userVid": 20019234, "bookmarkId": "3300028078_12_7537-7573", "chapterUid": 12, "range": "7537-7573", "markText": "ref 的作用不仅仅是实现原始值的响应式方案,它还用来解决响应丢失问题。", "totalCount": 101, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" }, { "userVid": 379029518, "name": "嗯哼", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/LIND77SSex8n6hmDP9FOicqnfIzbnvgla6RmNoTK2XmZL49tclTudTQ/0" } ] }, { "bookId": "3300028078", "userVid": 43411864, "bookmarkId": "3300028078_15_5518-5578", "chapterUid": 15, "range": "5518-5578", "markText": "我们把这种 HTML Attributes 与 DOM Properties 具有相同名称(即 id)的属性看作直接映射", "totalCount": 99, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 74832166, "bookmarkId": "3300028078_15_19174-19227", "chapterUid": 15, "range": "19174-19227", "markText": "使用 innerHTML 清空容器元素内容的另一个缺陷是,它不会移除绑定在 DOM 元素上的事件处理函数。", "totalCount": 99, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 22406976, "bookmarkId": "3300028078_20_8267-8366", "chapterUid": 20, "range": "8267-8366", "markText": "组件实例本质上就是一个状态集合(或一个对象),它维护着组件运行过程中的所有信息,例如注册到组件的生命周期函数、组件渲染的子树(subTree)、组件是否已经被挂载、组件自身的状态(data),等等。", "totalCount": 96, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 29906373, "bookmarkId": "3300028078_24_1142-1187", "chapterUid": 24, "range": "1142-1187", "markText": "完整的编译过程通常包含词法分析、语法分析、语义分析、中间代码生成、优化、目标代码生成等步骤", "totalCount": 96, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" }, { "userVid": 50560008, "name": "谢某", "nick": "谢某", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/cluclefOxgAvI39cKvDHUggacAic6jcXFae5e0s8hMPKXbOkTaw1yYMxcLXeScndF1SS4WLnaxyx8Jwqd9OFrxSdOovKIlh063Z6BmfJpHcg/132" } ] }, { "bookId": "3300028078", "userVid": 341364883, "bookmarkId": "3300028078_17_2073-2108", "chapterUid": 17, "range": "2073-2108", "markText": "双端 Diff 算法是一种同时对新旧两组子节点的两个端点进行比较的算法", "totalCount": 95, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 379700173, "bookmarkId": "3300028078_20_19317-19435", "chapterUid": 20, "range": "19317-19435", "markText": "这是因为 setup 函数主要用于配合组合式 API,为用户提供一个地方,用于建立组合逻辑、创建响应式数据、创建通用函数、注册生命周期钩子等能力。在组件的整个生命周期中,setup 函数只会在被挂载时执行一次,它的返回值可以有两种情况。", "totalCount": 95, "users": [ { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 32217109, "name": "Yue栎廷", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/uI5pczeERTZebYm9hj4apsWROCeBd7wibIKmjkMKfBovOQ8bS4ZUoyQX6ehKWticGJ9DArntwMsms/0" }, { "userVid": 36510233, "name": "ivan", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/C9Kp3XDiaGaENto8vRdoMicJAUbiaSO4hGiay8OwtW5sIXwp2UgwxIGkEHDGDbZYwgFxazhVmF76On526y8z8jZOAA/132" } ] }, { "bookId": "3300028078", "userVid": 363781018, "bookmarkId": "3300028078_7_8583-8650", "chapterUid": 7, "range": "8583-8650", "markText": "vue.global.js 用于开发环境,它包含必要的警告信息,而 vue.global.prod.js 用于生产环境,不包含警告信息", "totalCount": 94, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 353567754, "name": "霜降*", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/QnM5bMcic4Z371ZPSibDcPHPmCS7XC2crQf76QlgxShYoFfia68u8gdj1mQaDUuQvsjPOwWyjUQUsQ/0" } ] }, { "bookId": "3300028078", "userVid": 390935904, "bookmarkId": "3300028078_10_40156-40231", "chapterUid": 10, "range": "40156-40231", "markText": "当读取计算属性的值时,我们可以手动调用 track 函数进行追踪;当计算属性依赖的响应式数据发生变化时,我们可以手动调用 trigger 函数触发响应", "totalCount": 94, "users": [ { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 563008428, "name": "scanf", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/8d5Jl1NtdSEn3WxBEO80zUzL1hibpUib5iavkDQEaGPaS6I2TsiaHhHONkfWYx7uVzfRk6Kk0pMSZe0Kp1cbw0BtVA/132" }, { "userVid": 65638932, "name": "简单·", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/m7MVZqcKyyeL0yQesZhGLIWVMMzDW5sAYG2yIeU9mGXmcIoLh95JMGceNeiaFnwtP28jnLBrCKMH30LHsCmlrgg/132" } ] }, { "bookId": "3300028078", "userVid": 350348, "bookmarkId": "3300028078_7_3839-3871", "chapterUid": 7, "range": "3839-3871", "markText": "每一个 warn 函数的调用都会配合 __DEV__ 常量的检查", "totalCount": 93, "users": [ { "userVid": 36619264, "name": "zezeze", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/XxT9TiaJ1ibf2RXE8PAJkdzIKdBOLoBf4yFwSsmXkYMEKQuA7uTTacTg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 351326741, "name": "Nansen", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJAYR7IW64kKEH6kwQxt48pKdutFibdbktVESWALQ1rHYDHk8R4sY8HnVVkT2sSV538MibHlicWc7YeicZntZjVd9sdiaPUoKSorFPt4MiaMxDmgoBw/132" } ] }, { "bookId": "3300028078", "userVid": 54159301, "bookmarkId": "3300028078_20_14048-14112", "chapterUid": 20, "range": "14048-14112", "markText": "在 Vue.js 3 中,没有定义在 MyComponent.props 选项中的 props 数据将存储到 attrs 对象中", "totalCount": 93, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 272677905, "name": "Dylan", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLO3Q5QE2qTzXzqUl7KCWojic4nf0xJFmvcMcoEPr8bYZYWwGbD5vSwSrR36DXxuZzp0RDDJibTxQnQ/132" } ] }, { "bookId": "3300028078", "userVid": 347016084, "bookmarkId": "3300028078_8_5196-5260", "chapterUid": 8, "range": "5196-5260", "markText": "接下来,我们需要编写一个渲染器,把上面这段虚拟 DOM 渲染为真实 DOM:", "totalCount": 92, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 80945154, "name": "叶超林", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqFNowSGNVtatmKqO4PxWE4vPDm9R2SxvsZYVXxTNgnMb9BvppJdFneDsAqDa0s5xmY7oRUCHicRAw/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 22529965, "bookmarkId": "3300028078_10_21013-21046", "chapterUid": 10, "range": "21013-21046", "markText": "实际上 Vue.js 的渲染函数就是在一个 effect 中执行的", "totalCount": 92, "users": [ { "userVid": 36916736, "name": "L!anωen", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/d9ia5Dg7ILtJzjhlCnlRmptFKgiatANtwX8Z6g2qgUMCM4yUBbSlN7IInyb6g51NM9fVRXCt5nqRWIDaAE1Y2uLQ/132" }, { "userVid": 251682313, "name": "栗子", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ASzcVXmk7icibCySWHokuIZITBV0r6kI324XorQWJkAEc9VL8g5XvN8AQmsCDUsPibTtFXhyPTw7lFiagsVFBjicS1g/132" }, { "userVid": 597909521, "name": "雨豪", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/gwhELYibibFdRuUiaKqq9K3ia6QrAqZjH3606mE5DItAZ5g1maEiaYGLibVst0iaibTDic1gQJZNt6uOTvvo/0" } ] }, { "bookId": "3300028078", "userVid": 22406976, "bookmarkId": "3300028078_14_2216-2245", "chapterUid": 14, "range": "2216-2245", "markText": "我们利用响应系统的能力,自动调用渲染器完成页面的渲染和更新", "totalCount": 92, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 379029518, "name": "嗯哼", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/LIND77SSex8n6hmDP9FOicqnfIzbnvgla6RmNoTK2XmZL49tclTudTQ/0" } ] }, { "bookId": "3300028078", "userVid": 342395095, "bookmarkId": "3300028078_12_11654-11735", "chapterUid": 12, "range": "11654-11735", "markText": "ref 本质上是一个“包裹对象”。因为 JavaScript 的 Proxy 无法提供对原始值的代理,所以我们需要使用一层对象作为包裹,间接实现原始值的响应式方案", "totalCount": 91, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 263647962, "bookmarkId": "3300028078_20_15707-15736", "chapterUid": 20, "range": "15707-15736", "markText": "我们把由父组件自更新所引起的子组件更新叫作子组件的被动更新", "totalCount": 91, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 379029518, "name": "嗯哼", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/LIND77SSex8n6hmDP9FOicqnfIzbnvgla6RmNoTK2XmZL49tclTudTQ/0" }, { "userVid": 272677905, "name": "Dylan", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLO3Q5QE2qTzXzqUl7KCWojic4nf0xJFmvcMcoEPr8bYZYWwGbD5vSwSrR36DXxuZzp0RDDJibTxQnQ/132" } ] }, { "bookId": "3300028078", "userVid": 373431741, "bookmarkId": "3300028078_10_48170-48192", "chapterUid": 10, "range": "48170-48192", "markText": "flush 本质上是在指定调度函数的执行时机", "totalCount": 90, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 55364918, "bookmarkId": "3300028078_24_32423-32471", "chapterUid": 24, "range": "32423-32471", "markText": "上下文对象其实就是程序在某个范围内的“全局变量”。换句话说,我们也可以把全局变量看作全局上下文。", "totalCount": 90, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 496138, "name": "李渊", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLibgSzf26ZTIPUoNTVaNcS9wSFTyiaxfL9pTURz7yMKE0XuGBA0RSdAEAzRvyEClI0ia9icF8F6BTPZg/132" } ] }, { "bookId": "3300028078", "userVid": 212271807, "bookmarkId": "3300028078_20_28165-28203", "chapterUid": 20, "range": "28165-28203", "markText": "组件模板中的插槽内容会被编译为插槽函数,而插槽函数的返回值就是具体的插槽内容", "totalCount": 89, "users": [ { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 8853518, "name": "断线人偶", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLiazmfBNv7WNlr1LU0ITyYvNpI5WPv4L7XwMlCdRzI736U1X6NMsnO2Wmic5LCMqhs5kZ8Lg1s8mBA/132" } ] }, { "bookId": "3300028078", "userVid": 11706700, "bookmarkId": "3300028078_11_97376-97435", "chapterUid": 11, "range": "97372-97431", "markText": "可迭代协议指的是一个对象实现了 Symbol.iterator 方法,而迭代器协议指的是一个对象实现了 next 方法", "totalCount": 88, "users": [ { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 11374086, "name": "刘建良", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/RehAk4vTPqwyE4wGxYAgCm0BwLT5vpkRQKCKVrWOlPnbNicN0icvSO7auJQoSSnpOFvLP7Aksav2Mr4TNL0H6ibiaQ/132" } ] }, { "bookId": "3300028078", "userVid": 286541, "bookmarkId": "3300028078_6_12624-12665", "chapterUid": 6, "range": "12624-12665", "markText": "一个框架既可以是纯运行时的,也可以是纯编译时的,还可以是既支持运行时又支持编译时的", "totalCount": 87, "users": [ { "userVid": 36619264, "name": "zezeze", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/XxT9TiaJ1ibf2RXE8PAJkdzIKdBOLoBf4yFwSsmXkYMEKQuA7uTTacTg/0" }, { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 249654794, "name": "Zushi", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/icOeDEYKU3jZzWrR94TocmA69nydIryUdC7Koopu5O0UTGricLYhjbPrByzSSw87icOc6ichz3txnto/0" } ] }, { "bookId": "3300028078", "userVid": 390935904, "bookmarkId": "3300028078_10_55545-55588", "chapterUid": 10, "range": "55545-55588", "markText": "如果 trigger 触发执行的副作用函数与当前正在执行的副作用函数相同,则不触发执行", "totalCount": 87, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 563008428, "name": "scanf", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/8d5Jl1NtdSEn3WxBEO80zUzL1hibpUib5iavkDQEaGPaS6I2TsiaHhHONkfWYx7uVzfRk6Kk0pMSZe0Kp1cbw0BtVA/132" } ] }, { "bookId": "3300028078", "userVid": 66366198, "bookmarkId": "3300028078_17_35417-35473", "chapterUid": 17, "range": "35417-35473", "markText": "相比简单 Diff 算法,双端 Diff 算法的优势在于,对于同样的更新场景,执行的DOM 移动操作次数更少。", "totalCount": 86, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 338603526, "name": "Autubrew", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/ChCs6YSVOGWNV6k32hzibqSJoJMJnOtJYZsjLPuWkAlIXCdXoOMBXlA/0" } ] }, { "bookId": "3300028078", "userVid": 15801583, "bookmarkId": "3300028078_4_623-667", "chapterUid": 4, "range": "623-667", "markText": "相比 Vue.js 2,Vue.js 3.0 甚至做到了使用更少的代码来实现更多的功能。", "totalCount": 85, "users": [ { "userVid": 348093698, "name": "(*^ω^*)", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/DxncLlErbREMMcuz85u2vJagxDic2EJru5F2SHcj0usfpn5EsvDH33Q/0" }, { "userVid": 230141059, "name": "喜乐", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/Mjzdia7evAzwLkrotcj5D2mdZ70E2yH4icBL6ccwsvwyyvcPh2Tnlgng/0" }, { "userVid": 359211525, "name": "猪猪", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/zsUXYY6y4cJGfBicR8y5qB91icZhJGqXqMmzXuUwTofH1OkPMrCOQeok4KQpG5M7DWAnzwowAbedQ/0" } ] }, { "bookId": "3300028078", "userVid": 14800877, "bookmarkId": "3300028078_14_968-1001", "chapterUid": 14, "range": "968-1001", "markText": "渲染器不仅能够渲染真实 DOM 元素,它还是框架跨平台能力的关键。", "totalCount": 84, "users": [ { "userVid": 30348545, "name": "李浩然", "nick": "李浩然", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0026-vbxepbBtk1zEIyJGQyyGVd6/0", "isV": 0, "vDesc": "订阅号" }, { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" }, { "userVid": 298765187, "name": "hello", "nick": "hello", "gender": 0, "avatar": "https://res.weread.qq.com/wravatar/WV0011-3F~ByQLL7SM~k4Lh8FNMhc9/0" } ] }, { "bookId": "3300028078", "userVid": 13912952, "bookmarkId": "3300028078_10_56112-56147", "chapterUid": 10, "range": "56112-56147", "markText": "watch 的实现原理。它本质上利用了副作用函数重新执行时的可调度性。", "totalCount": 83, "users": [ { "userVid": 269579008, "name": "泽", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/vsACyXq1DBiaiaMArwbETfDGn2NqHIGMHKLW6BpichbDcH324bxxj5ZFw/0" }, { "userVid": 60422712, "name": "苗ོ少ོ", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/G7aF2QOQakzNibicBByr5DJdIvQia2guvzcfqoANocaPp0/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 246645635, "bookmarkId": "3300028078_11_47756-47807", "chapterUid": 11, "range": "47756-47807", "markText": "当修改 length 属性值时,只有那些索引值大于或等于新的 length 属性值的元素才需要触发响应", "totalCount": 83, "users": [ { "userVid": 312333440, "name": "X^S", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7mf3CQpbTRZQyztfBfSodicQ6p0icuNIMZtyBjIenAaB4w/0" }, { "userVid": 246645635, "name": "红", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/2kpMNDYsSfBYx8HVnp29GpRGM5GIZQU9USk4X4iaibE8zW2lfians3lww/0" }, { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" } ] }, { "bookId": "3300028078", "userVid": 7940809, "bookmarkId": "3300028078_16_6295-6336", "chapterUid": 16, "range": "6295-6336", "markText": "通过 DOM 的移动来完成子节点的更新,这要比不断地执行子节点的卸载和挂载性能更好", "totalCount": 83, "users": [ { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" } ] }, { "bookId": "3300028078", "userVid": 211609765, "bookmarkId": "3300028078_16_31053-31183", "chapterUid": 16, "range": "31053-31183", "markText": "简单 Diff 算法的核心逻辑是,拿新的一组子节点中的节点去旧的一组子节点中寻找可复用的节点。如果找到了,则记录该节点的位置索引。我们把这个位置索引称为最大索引。在整个更新过程中,如果一个节点的索引值小于最大索引,则说明该节点对应的真实DOM 元素需要移动。", "totalCount": 83, "users": [ { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 338603526, "name": "Autubrew", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/ChCs6YSVOGWNV6k32hzibqSJoJMJnOtJYZsjLPuWkAlIXCdXoOMBXlA/0" }, { "userVid": 3652871, "name": "冬Don", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eptQrvOpoyKicicyKtL0ETgG8SZYr8ia9cqlTwAysMSSTRBMk8SYicjdzmPibcqSdQgRiax7CUApKUVPibwA/132" } ] }, { "bookId": "3300028078", "userVid": 27351397, "bookmarkId": "3300028078_15_4004-4039", "chapterUid": 15, "range": "4004-4039", "markText": "HTML Attributes 指的就是定义在 HTML 标签上的属性", "totalCount": 82, "users": [ { "userVid": 246645635, "name": "红", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/2kpMNDYsSfBYx8HVnp29GpRGM5GIZQU9USk4X4iaibE8zW2lfians3lww/0" }, { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 378750283, "bookmarkId": "3300028078_28_4325-4354", "chapterUid": 28, "range": "4325-4354", "markText": "同构渲染分为首次渲染(即首次访问或刷新页面)以及非首次渲染", "totalCount": 82, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 10507862, "name": "风筝", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJJibRXtcpJr8fGIdMLAFkvjMibwCqic3VqVY6Z09qf5NnRWtyqfKUC6HvZrefPrd1bUtrwNtQQO4aFA/132" }, { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" } ] }, { "bookId": "3300028078", "userVid": 377150113, "bookmarkId": "3300028078_11_6108-6148", "chapterUid": 11, "range": "6108-6148", "markText": "代理对象的 get 拦截函数接收第三个参数 receiver,它代表谁在读取属性", "totalCount": 81, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 14675648, "name": "苗淼喵", "nick": "苗淼喵", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0019-JOTdRKpC0g2CZmYCJ9jiyd6/0", "isV": 0, "vDesc": "读书为了认识不为批判" }, { "userVid": 52978559, "name": "luckier", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/EagiasBPtYbtUTh8z43WoMOI8sejJ430vBrrKC3iaPPtrfyZ4PwNeoxWyhuLoRcPaVT9VSA324Bdo/0" } ] }, { "bookId": "3300028078", "userVid": 45933945, "bookmarkId": "3300028078_11_13615-13641", "chapterUid": 11, "range": "13615-13641", "markText": "可以通过 has 拦截函数实现对 in 操作符的代理", "totalCount": 80, "users": [ { "userVid": 246645635, "name": "红", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/2kpMNDYsSfBYx8HVnp29GpRGM5GIZQU9USk4X4iaibE8zW2lfians3lww/0" }, { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 324439242, "bookmarkId": "3300028078_12_9000-9062", "chapterUid": 12, "range": "9000-9062", "markText": "所谓自动脱 ref,指的是属性的访问行为,即如果读取的属性是一个 ref,则直接将该 ref 对应的 value 属性值返回", "totalCount": 80, "users": [ { "userVid": 407117782, "name": "ha1bara", "nick": "ha1bara", "gender": 0, "avatar": "https://res.weread.qq.com/wravatar/WV0011-Lvics6xGImZ13sanlZkL6b8/0" }, { "userVid": 22406976, "name": "刘雄风", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/qYTKLhVJAge3YD8ribVV6yZ8mbYZfT55paibliaromcqE2QNGVHm0RoBd0ubicDZANANcu15TJHaGHVBw9UBHVfDpw/132" }, { "userVid": 62511467, "name": "拾柒", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKKA5mbLNibPz8u4mibob6tCsDb5TLfIbGg3bbk0gEdnymC5OlHg8iaz970vlmnl1zQhOBX8lm9N5d65JUpmibPJc0hK1TqYMuDCc9Lujyu1rr0cg/132" } ] }, { "bookId": "3300028078", "userVid": 324439242, "bookmarkId": "3300028078_14_8069-8099", "chapterUid": 14, "range": "8069-8099", "markText": "patch 函数不仅可以用来完成打补丁,也可以用来执行挂载。", "totalCount": 80, "users": [ { "userVid": 711807, "name": "项旋久", "nick": "项旋久", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0027-4p19Gsas_PaLZ2cBExdQ0e6/0" }, { "userVid": 394534945, "name": "雨夜客舟", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epxd6liauJx9nAaL8iaPUuuOmjDKBaSY7LpxDacDLqJ29uq0iclUV8umHkibfr8KQBaEnuFiaYkkgmYYtQ/132" }, { "userVid": 52978559, "name": "luckier", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/EagiasBPtYbtUTh8z43WoMOI8sejJ430vBrrKC3iaPPtrfyZ4PwNeoxWyhuLoRcPaVT9VSA324Bdo/0" } ] }, { "bookId": "3300028078", "userVid": 19145631, "bookmarkId": "3300028078_11_10931-11039", "chapterUid": 11, "range": "10931-11039", "markText": "这里需要强调的是,deleteProperty 实现的是代理对象 p 的内部方法和行为,所以为了删除被代理对象上的属性值,我们需要使用 Reflect.deleteProperty(target, key) 来完成。", "totalCount": 79, "users": [ { "userVid": 30348545, "name": "李浩然", "nick": "李浩然", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0026-vbxepbBtk1zEIyJGQyyGVd6/0", "isV": 0, "vDesc": "订阅号" }, { "userVid": 298765187, "name": "hello", "nick": "hello", "gender": 0, "avatar": "https://res.weread.qq.com/wravatar/WV0011-3F~ByQLL7SM~k4Lh8FNMhc9/0" }, { "userVid": 319605380, "name": "之之琳琳", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/icnouEepgGPYm0PKKATkukx6lzMaz2MFdpkSibd50mbUc/0" } ] }, { "bookId": "3300028078", "userVid": 324183334, "bookmarkId": "3300028078_4_2547-2573", "chapterUid": 4, "range": "2547-2573", "markText": "Vue.js 3.0 是一个运行时 + 编译时的框架", "totalCount": 76, "users": [ { "userVid": 302696449, "name": "曾昱深 Zeno", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7YAQgDGM5STR9sZibtlaB9o06HE6snWegybvy53zFTgMA/0" }, { "userVid": 361848194, "name": " 一棵卿菜", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJyroS7MHXVSBYibt1MUhKJS41eibpFClxhl5oMKBOoQdeE8op4beibDTh55miaJ153MdXUwrH8MU314wVAiazyibQolSibdom9XWGpqc9xkrmsdqwjg/132" }, { "userVid": 26549690, "name": "同心圆", "nick": "同心圆", "gender": 1, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/VlOYGeJkaMFuQkT5mGDMgOuYcxn4fakNaYt4zVSXjmxjibZO5OnJr9JKTNticnQsWibu5e5YiarGsMmBUTKY3Y3KWQ/0" } ] }, { "bookId": "3300028078", "userVid": 12207615, "bookmarkId": "3300028078_18_12935-13094", "chapterUid": 18, "range": "12935-13094", "markText": "其实无论是简单 Diff 算法,还是双端 Diff 算法,抑或本章介绍的快速 Diff 算法,它们都遵循同样的处理规则:\n● 判断是否有节点需要移动,以及应该如何移动;\n● 找出那些需要被添加或移除的节点。", "totalCount": 75, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" } ] }, { "bookId": "3300028078", "userVid": 43411864, "bookmarkId": "3300028078_28_6235-6276", "chapterUid": 28, "range": "6235-6276", "markText": "同构渲染的“同构”一词的含义是,同样一套代码既可以在服务端运行,也可以在客户端运行", "totalCount": 74, "users": [ { "userVid": 309508294, "name": "……", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJ4xMNulPSyg6jpRzngeWHvrrD0XdkmJflia58sia0fYicVFQtadQUM8DqyZicPSLwNG3YjiceVykqFCQA/132" }, { "userVid": 22406976, "name": "刘雄风", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/qYTKLhVJAge3YD8ribVV6yZ8mbYZfT55paibliaromcqE2QNGVHm0RoBd0ubicDZANANcu15TJHaGHVBw9UBHVfDpw/132" }, { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" } ] }, { "bookId": "3300028078", "userVid": 581001137, "bookmarkId": "3300028078_20_24916-24961", "chapterUid": 20, "range": "24916-24961", "markText": "发射自定义事件的本质就是根据事件名称去 props 数据对象中寻找对应的事件处理函数并执行", "totalCount": 73, "users": [ { "userVid": 22406976, "name": "刘雄风", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/qYTKLhVJAge3YD8ribVV6yZ8mbYZfT55paibliaromcqE2QNGVHm0RoBd0ubicDZANANcu15TJHaGHVBw9UBHVfDpw/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" } ] }, { "bookId": "3300028078", "userVid": 263862553, "bookmarkId": "3300028078_10_46376-46402", "chapterUid": 10, "range": "46376-46402", "markText": "watch 的本质其实是对 effect 的二次封装", "totalCount": 72, "users": [ { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 312360534, "name": "馁", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/HZBn5rapf9Bf8aUJia9HFDotyUCO00NZibQAxx4QakuRsOb5CaHk9XicSOphPibVPPOpbmfM3xLtYb961c7icC4egFQ/132" }, { "userVid": 3652871, "name": "冬Don", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eptQrvOpoyKicicyKtL0ETgG8SZYr8ia9cqlTwAysMSSTRBMk8SYicjdzmPibcqSdQgRiax7CUApKUVPibwA/132" } ] }, { "bookId": "3300028078", "userVid": 305843641, "bookmarkId": "3300028078_10_34353-34444", "chapterUid": 10, "range": "34353-34444", "markText": "我们将副作用函数 effectFn 作为 effect 函数的返回值,这就意味着当调用 effect 函数时,通过其返回值能够拿到对应的副作用函数,这样我们就能手动执行该副作用函数了", "totalCount": 71, "users": [ { "userVid": 14675648, "name": "苗淼喵", "nick": "苗淼喵", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0019-JOTdRKpC0g2CZmYCJ9jiyd6/0", "isV": 0, "vDesc": "读书为了认识不为批判" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 7470267, "bookmarkId": "3300028078_16_15867-15908", "chapterUid": 16, "range": "15867-15908", "markText": "移动节点指的是,移动一个虚拟节点所对应的真实 DOM 节点,并不是移动虚拟节点本身", "totalCount": 71, "users": [ { "userVid": 22406976, "name": "刘雄风", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/qYTKLhVJAge3YD8ribVV6yZ8mbYZfT55paibliaromcqE2QNGVHm0RoBd0ubicDZANANcu15TJHaGHVBw9UBHVfDpw/132" }, { "userVid": 62511467, "name": "拾柒", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKKA5mbLNibPz8u4mibob6tCsDb5TLfIbGg3bbk0gEdnymC5OlHg8iaz970vlmnl1zQhOBX8lm9N5d65JUpmibPJc0hK1TqYMuDCc9Lujyu1rr0cg/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 428441863, "bookmarkId": "3300028078_18_25112-25165", "chapterUid": 18, "range": "25112-25165", "markText": "在新的一组子节点中,重新编号后索引值为 0 和 1 的这两个节点在更新前后顺序没有发生变化。", "totalCount": 71, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 12207615, "name": "阵风", "nick": "阵风", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/SYeWkon6C6JDdan5jZZ2icxFEH4I56aryr4DE48zAPia3UDAI0bPjKTQ/0" } ] }, { "bookId": "3300028078", "userVid": 86174399, "bookmarkId": "3300028078_15_24683-24745", "chapterUid": 15, "range": "24683-24745", "markText": "事件可以视作一种特殊的属性,因此我们可以约定,在 vnode.props 对象中,凡是以字符串 on 开头的属性都视作事件。", "totalCount": 70, "users": [ { "userVid": 252557504, "name": "辻·寒蝉", "nick": "辻·寒蝉", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0013-XJy0atJ4mpdZkZ78cc6e8c7/0" }, { "userVid": 52978559, "name": "luckier", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/EagiasBPtYbtUTh8z43WoMOI8sejJ430vBrrKC3iaPPtrfyZ4PwNeoxWyhuLoRcPaVT9VSA324Bdo/0" }, { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" } ] }, { "bookId": "3300028078", "userVid": 295594502, "bookmarkId": "3300028078_4_385-438", "chapterUid": 4, "range": "385-438", "markText": "Vue.js 作为最流行的前端框架之一,在 2020 年 9 月 18 日,正式迎来了它的 3.0 版本。", "totalCount": 68, "users": [ { "userVid": 6095366, "name": "Mctjustin", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ribGzibLJLrnbjiceF0RhSDiaxVPKXI9WlwGia4lZZht3cniabOpE7kHc8PJMQs1g6nOzRPNwKphK8evKsRDaickbf1jw8byBsmoaa7z8jUbQRDUFU/132", "isV": 0, "vDesc": "一个会编程的互联网自媒体人" }, { "userVid": 309965706, "name": "阿黄", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIP3oFIfOCUttqJtLaBo9jHbM7nPdEe2eygvLM5BpuwlS3H94KEF4dHULwxZrLU2dGV9kqweMKicgw/132" }, { "userVid": 349528459, "name": "藏象", "nick": "藏象", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/ticUZoCbtedfMqlBYXdeeZttnwju3h5ibd6G9m05xF3qbhicicY09YpA9HLkVyTHfgWMugzmGUP7IrU/0" } ] }, { "bookId": "3300028078", "userVid": 394473931, "bookmarkId": "3300028078_10_18636-18739", "chapterUid": 10, "range": "18636-18739", "markText": "cleanup 函数接收副作用函数作为参数,遍历副作用函数的 effectFn.deps 数组,该数组的每一项都是一个依赖集合,然后将该副作用函数从依赖集合中移除,最后重置 effectFn.deps 数组", "totalCount": 68, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 407117782, "name": "ha1bara", "nick": "ha1bara", "gender": 0, "avatar": "https://res.weread.qq.com/wravatar/WV0011-Lvics6xGImZ13sanlZkL6b8/0" } ] }, { "bookId": "3300028078", "userVid": 394473931, "bookmarkId": "3300028078_10_6138-6234", "chapterUid": 10, "range": "6138-6234", "markText": "如上面的代码所示,由于副作用函数已经存储到了 activeEffect 中,所以在 get 拦截函数内应该把 activeEffect 收集到“桶”中,这样响应系统就不依赖副作用函数的名字了。", "totalCount": 66, "users": [ { "userVid": 312368129, "name": "XXYAOjru", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJNHbd8PibPm09IvmQO5se8xrCr4glEsT4ialiae8cXUAwsJibKllouzKEHXNg8IdQ83gic6iay7B6ETHyA/132" }, { "userVid": 348314859, "name": "loquats", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/XYrRG5UShDd2sYbote9WRiaVzQOibic39iaoJDibXJ7TYJX9l7B1k2WJ7rg/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 11706700, "bookmarkId": "3300028078_11_10512-10570", "chapterUid": 11, "range": "10512-10570", "markText": "其中 [[Call]] 和 [[Construct]] 这两个内部方法只有当被代理的对象是函数和构造函数时才会部署。", "totalCount": 66, "users": [ { "userVid": 67951362, "name": "在你说「喂」之前", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/8h9QXaJ70ibekfqYles7onC3PJkaIY7Er3yHiaVw7z5VMnkzTUbcR7aw/0" }, { "userVid": 402826116, "name": "Atom", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFOSicFO6RLpETzrUuz2vLIeZBDXIdlxvF5fGDvETwDSlD4ibmKFBRadJicNvK0P3YNl15w/0" }, { "userVid": 365291017, "name": "👣", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM6Zw07LmfQsJMRxHYD5nqOF8C0dx1Y0fgzOllLPgGXJhQ/0" } ] }, { "bookId": "3300028078", "userVid": 341364883, "bookmarkId": "3300028078_17_5204-5326", "chapterUid": 17, "range": "5204-5326", "markText": "将索引 oldEndIdx 指向的虚拟节点所对应的真实 DOM 移动到索引 oldStartIdx 指向的虚拟节点所对应的真实 DOM 前面", "totalCount": 66, "users": [ { "userVid": 14675648, "name": "苗淼喵", "nick": "苗淼喵", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0019-JOTdRKpC0g2CZmYCJ9jiyd6/0", "isV": 0, "vDesc": "读书为了认识不为批判" }, { "userVid": 36860930, "name": "麦兜篼", "nick": "麦兜篼", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0012-YmCJgfXd3e~vsrDW3WwKle5/0" }, { "userVid": 62511467, "name": "拾柒", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKKA5mbLNibPz8u4mibob6tCsDb5TLfIbGg3bbk0gEdnymC5OlHg8iaz970vlmnl1zQhOBX8lm9N5d65JUpmibPJc0hK1TqYMuDCc9Lujyu1rr0cg/132" } ] }, { "bookId": "3300028078", "userVid": 211609765, "bookmarkId": "3300028078_18_32139-32305", "chapterUid": 18, "range": "32139-32305", "markText": "快速 Diff 算法在实测中性能最优。它借鉴了文本 Diff 中的预处理思路,先处理新旧两组子节点中相同的前置节点和相同的后置节点。当前置节点和后置节点全部处理完毕后,如果无法简单地通过挂载新节点或者卸载已经不存在的节点来完成更新,则需要根据节点的索引关系,构造出一个最长递增子序列。最长递增子序列所指向的节点即为不需要移动的节点。", "totalCount": 66, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" }, { "userVid": 315109763, "name": "czs", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/82obRmnPJcC7tguS4sSzU1zhnUpP032WUBLIcFicORzw/0" } ] }, { "bookId": "3300028078", "userVid": 10050066, "bookmarkId": "3300028078_22_1103-1143", "chapterUid": 22, "range": "1103-1143", "markText": "Vue.js 内建的 KeepAlive 组件可以避免一个组件被频繁地销毁/重建", "totalCount": 64, "users": [ { "userVid": 6619907, "name": "杨杨", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DQob1F4mibqdZicoms6F48M6OsgEOVqRMwCMeazqxS48oJydwRaLUzGld3RD3nDkK66vgT6BywQRWqyN5xX99mhNAZafL3xic8ZYhcqXVRx10s/132" }, { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" }, { "userVid": 324252232, "name": "仅于", "nick": "仅于", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0016-7qbgIZMeO2jSkYLj59Zbfbc/0", "isV": 0, "vDesc": "Web前端" } ] }, { "bookId": "3300028078", "userVid": 63986704, "bookmarkId": "3300028078_6_11979-12021", "chapterUid": 6, "range": "11979-12021", "markText": "既然编译器可以把 HTML 字符串编译成数据对象,那么能不能直接编译成命令式代码呢?", "totalCount": 63, "users": [ { "userVid": 3000321, "name": "Erwa", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epDKn5HIevpR9yBHGbEL5kfsahvqsBfY8X8IaTHRjiaDJRI8Z0L8kmKtGNWhHeYLBNYg4SlGRNiaNrA/132" }, { "userVid": 23146987, "name": "赵志敏", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKIgE33HuBN3MMYTmn73Bc6JqRPKqzovZboaLEuvwyorqBK43mD4cXIE95sjFJsRoS3tm51r8dKDw/132" }, { "userVid": 203895941, "name": "ㅤ", "nick": "ㅤ", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0008-6Ww0blo1MxSgSUUjwn0Eye8/0", "isV": 0, "vDesc": "jingrong.wang | 希望能和你成爲朋友" } ] }, { "bookId": "3300028078", "userVid": 388644260, "bookmarkId": "3300028078_11_32845-32866", "chapterUid": 11, "range": "32845-32866", "markText": "代理对象可以通过 raw 属性读取原始数据", "totalCount": 63, "users": [ { "userVid": 294750977, "name": "profound-chaser", "gender": 0, "avatar": "https://res.weread.qq.com/wravatar/WV0019-wcCy2FMEDJ3z7fydD3KzFba/0" }, { "userVid": 246645635, "name": "红", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/2kpMNDYsSfBYx8HVnp29GpRGM5GIZQU9USk4X4iaibE8zW2lfians3lww/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 48049780, "bookmarkId": "3300028078_11_55601-55655", "chapterUid": 11, "range": "55598-55652", "markText": "迭代数组时,只需要在副作用函数与数组的长度和索引之间建立响应联系,就能够实现响应式的 for...of 迭代", "totalCount": 63, "users": [ { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 393443596, "name": "阿潇", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/KK4ZtrLb3wEcRVtVHoPtAkc9S4oZhmFfZR7y8iab6XOk/0" }, { "userVid": 8853518, "name": "断线人偶", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLiazmfBNv7WNlr1LU0ITyYvNpI5WPv4L7XwMlCdRzI736U1X6NMsnO2Wmic5LCMqhs5kZ8Lg1s8mBA/132" } ] }, { "bookId": "3300028078", "userVid": 309965706, "bookmarkId": "3300028078_10_30561-30594", "chapterUid": 10, "range": "30561-30594", "markText": "除了控制副作用函数的执行顺序,通过调度器还可以做到控制它的执行次数", "totalCount": 62, "users": [ { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 242774707, "name": "徜徉书海的鱼", "nick": "徜徉书海的鱼", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/kdU4CyxWHDHAQiajxfRsLkHzI780UYuZvLiaEVufwK2lxQF9iaFCekF6d5HXhbTpT5qhANGO6veJR1ADIkZfXqCFg/132", "isV": 0, "vDesc": "读书如抽丝" }, { "userVid": 309965706, "name": "阿黄", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIP3oFIfOCUttqJtLaBo9jHbM7nPdEe2eygvLM5BpuwlS3H94KEF4dHULwxZrLU2dGV9kqweMKicgw/132" } ] }, { "bookId": "3300028078", "userVid": 7871668, "bookmarkId": "3300028078_11_35705-35728", "chapterUid": 11, "range": "35705-35728", "markText": "所谓浅响应,指的是只有对象的第一层属性是响应的", "totalCount": 61, "users": [ { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" }, { "userVid": 62511467, "name": "拾柒", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKKA5mbLNibPz8u4mibob6tCsDb5TLfIbGg3bbk0gEdnymC5OlHg8iaz970vlmnl1zQhOBX8lm9N5d65JUpmibPJc0hK1TqYMuDCc9Lujyu1rr0cg/132" }, { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" } ] }, { "bookId": "3300028078", "userVid": 348314859, "bookmarkId": "3300028078_10_13315-13366", "chapterUid": 10, "range": "13315-13366", "markText": "如以上代码所示,分别把逻辑封装到 track 和 trigger 函数内,这能为我们带来极大的灵活性。", "totalCount": 59, "users": [ { "userVid": 8507791, "name": "Zeus", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqmkwvmgFrr3MG5FOGnO6PUFQ4Dsp2wqsnTdJGuiaA6QLaLiccOAXtah4qAe94w7aB5weRiczczKGWrg/132" }, { "userVid": 315109763, "name": "czs", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/82obRmnPJcC7tguS4sSzU1zhnUpP032WUBLIcFicORzw/0" }, { "userVid": 222137733, "name": "吴金存", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/WD4FduqfeKLZ5m4AHsdWUQyVtOyGOGfibibFiaVjfTktTDxpLl3sVEvdA/0" } ] }, { "bookId": "3300028078", "userVid": 262271556, "bookmarkId": "3300028078_21_554-575", "chapterUid": 21, "range": "554-575", "markText": "函数式组件的特点是:无状态、编写简单且直观", "totalCount": 59, "users": [ { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" }, { "userVid": 393443596, "name": "阿潇", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/KK4ZtrLb3wEcRVtVHoPtAkc9S4oZhmFfZR7y8iab6XOk/0" }, { "userVid": 1310350, "name": "十四画生", "nick": "十四画生", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/2viaqSM1mTMk0VZAEsCQ2JBkQC0ceI5Sah9gkbGbqa2cZiaHyNCqBoibQHNseLtorqialROz23dLTylUdc19Z5ic5mswrFGGtbIw0JuoDEWEVnBw/132" } ] }, { "bookId": "3300028078", "userVid": 296352091, "bookmarkId": "3300028078_21_3105-3144", "chapterUid": 21, "range": "3105-3144", "markText": "异步组件本质上是通过封装手段来实现友好的用户接口,从而降低用户层面的使用复杂度", "totalCount": 59, "users": [ { "userVid": 65587648, "name": "小范120斤", "nick": "小范120斤", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM7fIEgAnyW9EzU3Aiaf57GtcFeicsLD1upibL8lavaqk14lxp0aGiaIrywME7d9ODlKWBMWNA8dQ8q2Yg/132", "isV": 0, "vDesc": "20240511" }, { "userVid": 394534945, "name": "雨夜客舟", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epxd6liauJx9nAaL8iaPUuuOmjDKBaSY7LpxDacDLqJ29uq0iclUV8umHkibfr8KQBaEnuFiaYkkgmYYtQ/132" }, { "userVid": 19500163, "name": "周波", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJcsnVTAT3bO4Ls37UPqAnoX0I6xlXLvOqSGDGrm2IWSOdegBP8RYevzQQsMWLSrNw5DUHyoHOoUw/132" } ] }, { "bookId": "3300028078", "userVid": 396685765, "bookmarkId": "3300028078_10_37142-37184", "chapterUid": 10, "range": "37142-37184", "markText": "为了解决这个问题,就需要我们在实现 computed 函数时,添加对值进行缓存的功能", "totalCount": 58, "users": [ { "userVid": 22406976, "name": "刘雄风", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/qYTKLhVJAge3YD8ribVV6yZ8mbYZfT55paibliaromcqE2QNGVHm0RoBd0ubicDZANANcu15TJHaGHVBw9UBHVfDpw/132" }, { "userVid": 394534945, "name": "雨夜客舟", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epxd6liauJx9nAaL8iaPUuuOmjDKBaSY7LpxDacDLqJ29uq0iclUV8umHkibfr8KQBaEnuFiaYkkgmYYtQ/132" }, { "userVid": 334879364, "name": "E--Yi", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ClElGOWviaT1rZrbH80g33h5qtXRjVmdS0gyTN7oeMQEuUGFiaPwWic51T8PCTpiagghHYoia6ZuztuNLWiaGULpYlmQ/132" } ] }, { "bookId": "3300028078", "userVid": 24738654, "bookmarkId": "3300028078_11_55999-56029", "chapterUid": 11, "range": "55996-56026", "markText": "数组的 values 方法的返回值实际上就是数组内建的迭代器", "totalCount": 58, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 402826116, "name": "Atom", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFOSicFO6RLpETzrUuz2vLIeZBDXIdlxvF5fGDvETwDSlD4ibmKFBRadJicNvK0P3YNl15w/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 13566142, "bookmarkId": "3300028078_15_48224-48271", "chapterUid": 15, "range": "48224-48271", "markText": "Vue.js 3 是如何用 vnode 来描述多根节点模板的呢?答案是,使用 Fragment", "totalCount": 58, "users": [ { "userVid": 252557504, "name": "辻·寒蝉", "nick": "辻·寒蝉", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0013-XJy0atJ4mpdZkZ78cc6e8c7/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 204078879, "bookmarkId": "3300028078_10_20404-20467", "chapterUid": 10, "range": "20404-20467", "markText": "如以上代码所示,我们新构造了 effectsToRun 集合并遍历它,代替直接遍历 effects 集合,从而避免了无限执行。", "totalCount": 57, "users": [ { "userVid": 40707713, "name": "五月", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/HhRfwkaJkMs9DM1rPpMqGN8ow2nf4kZOGcCCVyDv3dHdeibFhvOXGgvSIl4IV0G1wickoYMrCibW7A/0" }, { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 402826116, "name": "Atom", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFOSicFO6RLpETzrUuz2vLIeZBDXIdlxvF5fGDvETwDSlD4ibmKFBRadJicNvK0P3YNl15w/0" } ] }, { "bookId": "3300028078", "userVid": 247164575, "bookmarkId": "3300028078_16_30752-30854", "chapterUid": 16, "range": "30752-30854", "markText": "遍历新旧两组子节点中数量较少的那一组,并逐个调用 patch 函数进行打补丁,然后比较新旧两组子节点的数量,如果新的一组子节点数量更多,说明有新子节点需要挂载;否则说明在旧的一组子节点中,有节点需要卸载。", "totalCount": 57, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 402826116, "bookmarkId": "3300028078_11_12873-12914", "chapterUid": 11, "range": "12873-12914", "markText": "in 操作符的运算结果是通过调用一个叫作 HasProperty 的抽象方法得到的", "totalCount": 56, "users": [ { "userVid": 402826116, "name": "Atom", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFOSicFO6RLpETzrUuz2vLIeZBDXIdlxvF5fGDvETwDSlD4ibmKFBRadJicNvK0P3YNl15w/0" }, { "userVid": 428441863, "name": "夜光", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJ1ICeljzsVFXQP9ASmVEppXwsgB5zW1ibw4ibiafvsMWTddC0XljZ186ibkUjWtWevnTJRuNAPEiakr4DyiaBcbvEqwSQ9MbZFLq6BFkHtbPJO6rzA/132" }, { "userVid": 276155530, "name": "🐶 Yao", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/nagrPLga3LibZOLBwBVGYgvjCVFg8w3suTa7YElw3tyQ/0", "isV": 0, "vDesc": "我有时间就睡觉。" } ] }, { "bookId": "3300028078", "userVid": 18933928, "bookmarkId": "3300028078_26_501-547", "chapterUid": 26, "range": "501-547", "markText": "但优化的方向基本一致,即尽可能地区分动态内容和静态内容,并针对不同的内容采用不同的优化策略。", "totalCount": 55, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 246645635, "name": "红", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/2kpMNDYsSfBYx8HVnp29GpRGM5GIZQU9USk4X4iaibE8zW2lfians3lww/0" }, { "userVid": 71157252, "name": "无人生还", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/6XFhg7ldObwXicFdeibn7IM1CicODfB6dAW65MGxaqn8kcIxPF3hW6Pibg/0" } ] }, { "bookId": "3300028078", "userVid": 10262522, "bookmarkId": "3300028078_11_50144-50180", "chapterUid": 11, "range": "50144-50180", "markText": "这里有必要指出一点,我们应该尽量避免使用 for...in 循环遍历数组", "totalCount": 54, "users": [ { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 380958124, "name": "王珣亦", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/z3nIITkhzRgHb1vJn9ybTI2uVhfPFV3DZvObQJAQ3ia7pvy4icpHtQcklibU5yWIrX6y2vN0aWOY6LMmyXvMYc4kwib0pRRIDmvRPoLFBDiagAeA/132" } ] }, { "bookId": "3300028078", "userVid": 391667021, "bookmarkId": "3300028078_10_38612-38664", "chapterUid": 10, "range": "38612-38664", "markText": "当 obj.foo 或 obj.bar 的值发生变化时,只要 dirty 的值重置为 true 就可以了", "totalCount": 53, "users": [ { "userVid": 402446338, "name": "哔哩哔哩", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/v6XbW38nFORCaMNJ04BWOs8QtRmKgUT6MZCibZhlRF935mU5z6bCl0JKpvn9z1FCvIXa26UFIic34/0" }, { "userVid": 15364744, "name": "File Transfer", "nick": "File Transfer", "gender": 1, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM4lYBXeWCSka4bYnqicnfRVEZnRge3y6UPoEnGhE92ticj3R0S7Acgicy2vMgHqwOqrEMn2PrskdxCXw/0" }, { "userVid": 309965706, "name": "阿黄", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIP3oFIfOCUttqJtLaBo9jHbM7nPdEe2eygvLM5BpuwlS3H94KEF4dHULwxZrLU2dGV9kqweMKicgw/132" } ] }, { "bookId": "3300028078", "userVid": 62477132, "bookmarkId": "3300028078_16_8041-8058", "chapterUid": 16, "range": "8041-8058", "markText": "DOM 可复用并不意味着不需要更新", "totalCount": 53, "users": [ { "userVid": 22406976, "name": "刘雄风", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/qYTKLhVJAge3YD8ribVV6yZ8mbYZfT55paibliaromcqE2QNGVHm0RoBd0ubicDZANANcu15TJHaGHVBw9UBHVfDpw/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 62477132, "name": "BIN 💨", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/t2L1dlrxcCMD1UQrw6lxUkLknr2OibXibicdNSInot0RSianic1JvIIbicicEoYjicc8njp914l1GYU7tHE/0" } ] }, { "bookId": "3300028078", "userVid": 17200063, "bookmarkId": "3300028078_26_5773-5851", "chapterUid": 26, "range": "5773-5851", "markText": "除了模板中的根节点需要作为 Block 角色之外,任何带有 v-for、v-if/v-else-if/v-else 等指令的节点都需要作为 Block 节点", "totalCount": 53, "users": [ { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" }, { "userVid": 327038088, "name": "YZ", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/GUxXEdCjKbLURG7AqNS9exfnvBn1AM7CBYebFT3NE9wVPq5PicoDeouhFmn6jQWKAmYwdyTbKlLS6cbUicLAicZtg/132" }, { "userVid": 42192653, "name": "吴嘉辉", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PxiaK7okBmkmCkN9fTSBejsf3qIk4r9vNKtXX0dpINXqOwqDLib0oszL45MxicPoH4qXBmK8iax8ImUjkg0LnTwQIg/132" } ] }, { "bookId": "3300028078", "userVid": 230054035, "bookmarkId": "3300028078_14_645-715", "chapterUid": 14, "range": "645-715", "markText": "Vue.js 3 的渲染器不仅仅包含传统的 Diff 算法,它还独创了快捷路径的更新方式,能够充分利用编译器提供的信息,大大提升了更新性能。", "totalCount": 52, "users": [ { "userVid": 289283170, "name": "Carvin", "nick": "Carvin", "gender": 1, "avatar": "https://res.weread.qq.com/wravatar/WV0019-IEJ93MCAQX~Gx9azW0Io8e3/0" }, { "userVid": 28440324, "name": "不求甚解", "nick": "不求甚解", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM6OpNz7k5v5uQCl3AdQIxJrpfiaOYCerTDic7LRQIE5IeNsGpLCVsDWro5cJW20WMRKFW6S3ywalzCg/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" } ] }, { "bookId": "3300028078", "userVid": 380958124, "bookmarkId": "3300028078_18_2572-2603", "chapterUid": 18, "range": "2572-2603", "markText": "快速 Diff 算法借鉴了纯文本 Diff 算法中预处理的步骤", "totalCount": 50, "users": [ { "userVid": 11706700, "name": "呱呱呆", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM5S1UCwLsibDc8c85ekCLM85PmAqicYLXHbSowYzgPt2gjA01TibbcOr6XXJbC0kqxk7zyILCeThhIqw/132" }, { "userVid": 2271085, "name": "陈坚泓", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIt85aRRv4KP20xA23TFCQ1X3MAYakLOK0xFKjmHh4xY5X8rBBGj6L0POnArmMW0UYn8a7lxQfWCg/132" }, { "userVid": 393443596, "name": "阿潇", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/KK4ZtrLb3wEcRVtVHoPtAkc9S4oZhmFfZR7y8iab6XOk/0" } ] }, { "bookId": "3300028078", "userVid": 341364883, "bookmarkId": "3300028078_20_20259-20321", "chapterUid": 20, "range": "20259-20321", "markText": "setup 函数接收两个参数。第一个参数是props 数据对象,第二个参数也是一个对象,通常称为 setupContext", "totalCount": 50, "users": [ { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" }, { "userVid": 33779051, "name": "轻描淡写的小情绪", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/FYE0O5Av2UCFxFic6c5LHmQ0Cb5QtsqGh5PyOBaWX0Eztlk5hibT0TfYwKlkIx3rZEpsVoibDZnVl7YUHaH1VOs91xFZZ9coZv3DtHIdm4ibKcI/132" }, { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" } ] }, { "bookId": "3300028078", "userVid": 55419214, "bookmarkId": "3300028078_12_935-951", "chapterUid": 12, "range": "935-951", "markText": "使用一个非原始值去“包裹”原始值", "totalCount": 48, "users": [ { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" }, { "userVid": 312360534, "name": "馁", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/HZBn5rapf9Bf8aUJia9HFDotyUCO00NZibQAxx4QakuRsOb5CaHk9XicSOphPibVPPOpbmfM3xLtYb961c7icC4egFQ/132" }, { "userVid": 36616111, "name": "Jy", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJib9868nWiaNHtWEib0fKykSXBZMVYdwP8O1iczrnN9x4HPKf1EDAd0Ht1LKlSVMfRQYcUOh1c52BLBw/132" } ] }, { "bookId": "3300028078", "userVid": 343600346, "bookmarkId": "3300028078_10_56443-56460", "chapterUid": 10, "range": "56443-56460", "markText": "过期的副作用函数,它会导致竞态问题", "totalCount": 46, "users": [ { "userVid": 11622021, "name": "小杨", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/k0CEA85c6ia4rHLhfiabxWf7RqOf68a2DXtvgkRibax0Myya8dJAg9XZ3Ribfz4bwFJgFNOOc0ic0jPMqn8aOK6cknw/132" }, { "userVid": 361029676, "name": "屿", "nick": "屿", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0013-JAhWZoZ3bOjFQlc1VvKb~c3/0" }, { "userVid": 309965706, "name": "阿黄", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIP3oFIfOCUttqJtLaBo9jHbM7nPdEe2eygvLM5BpuwlS3H94KEF4dHULwxZrLU2dGV9kqweMKicgw/132" } ] }, { "bookId": "3300028078", "userVid": 289297078, "bookmarkId": "3300028078_11_50995-51042", "chapterUid": 11, "range": "50995-51042", "markText": "无论是为数组添加新元素,还是直接修改数组的长度,本质上都是因为修改了数组的 length 属性", "totalCount": 46, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 246645635, "name": "红", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/2kpMNDYsSfBYx8HVnp29GpRGM5GIZQU9USk4X4iaibE8zW2lfians3lww/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 10960306, "bookmarkId": "3300028078_24_761-824", "chapterUid": 24, "range": "761-824", "markText": "Vue.js 的模板和 JSX 都属于领域特定语言,它们的实现难度属于中、低级别,只要掌握基本的编译技术理论即可实现这些功能。", "totalCount": 46, "users": [ { "userVid": 261994496, "name": "Godfery", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eruqaxH6bnFLPDwD2FCjIYEV4G9zZ60TonrLRXOoA52KAOf7nfCOoKwNxyGEFcvyLeKs6G9DibfupA/132" }, { "userVid": 2271085, "name": "陈坚泓", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIt85aRRv4KP20xA23TFCQ1X3MAYakLOK0xFKjmHh4xY5X8rBBGj6L0POnArmMW0UYn8a7lxQfWCg/132" }, { "userVid": 15364744, "name": "File Transfer", "nick": "File Transfer", "gender": 1, "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM4lYBXeWCSka4bYnqicnfRVEZnRge3y6UPoEnGhE92ticj3R0S7Acgicy2vMgHqwOqrEMn2PrskdxCXw/0" } ] }, { "bookId": "3300028078", "userVid": 22406976, "bookmarkId": "3300028078_11_18287-18332", "chapterUid": 11, "range": "18287-18332", "markText": "当添加属性时,我们将那些与 ITERATE_KEY 相关联的副作用函数也取出来执行就可以了", "totalCount": 45, "users": [ { "userVid": 65587648, "name": "小范120斤", "nick": "小范120斤", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM7fIEgAnyW9EzU3Aiaf57GtcFeicsLD1upibL8lavaqk14lxp0aGiaIrywME7d9ODlKWBMWNA8dQ8q2Yg/132", "isV": 0, "vDesc": "20240511" }, { "userVid": 428441863, "name": "夜光", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJ1ICeljzsVFXQP9ASmVEppXwsgB5zW1ibw4ibiafvsMWTddC0XljZ186ibkUjWtWevnTJRuNAPEiakr4DyiaBcbvEqwSQ9MbZFLq6BFkHtbPJO6rzA/132" }, { "userVid": 591402122, "name": ";", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/NlXFt44Ip56w30RtiatwwLtc7ww82NpibyibRG1Bsiaur49ku4EMcquMibgwkPlEp0bJTQKiaqFKSjHORMhUrkQK1VdQ/132" } ] }, { "bookId": "3300028078", "userVid": 243693487, "bookmarkId": "3300028078_12_3734-3763", "chapterUid": 12, "range": "3734-3763", "markText": "为什么会导致响应丢失呢?这是由展开运算符(...)导致的。", "totalCount": 44, "users": [ { "userVid": 14675648, "name": "苗淼喵", "nick": "苗淼喵", "gender": 2, "avatar": "https://res.weread.qq.com/wravatar/WV0019-JOTdRKpC0g2CZmYCJ9jiyd6/0", "isV": 0, "vDesc": "读书为了认识不为批判" }, { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" }, { "userVid": 341364883, "name": "与君初相识", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM7nP4e0I113t6UjmBRV9IPkibZhgAthUSQMTvibuoQPxoAw/0" } ] }, { "bookId": "3300028078", "userVid": 393443596, "bookmarkId": "3300028078_15_23541-23589", "chapterUid": 15, "range": "23541-23589", "markText": "一个 vnode 可以用来描述普通标签,也可以用来描述组件,还可以用来描述 Fragment 等", "totalCount": 40, "users": [ { "userVid": 65587648, "name": "小范120斤", "nick": "小范120斤", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM7fIEgAnyW9EzU3Aiaf57GtcFeicsLD1upibL8lavaqk14lxp0aGiaIrywME7d9ODlKWBMWNA8dQ8q2Yg/132", "isV": 0, "vDesc": "20240511" }, { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" }, { "userVid": 34852868, "name": "Zzzzzzz😴", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJVo65QTdybiczaavneLoV4yXGPSvA09YQwkicoiapGmIRlcibMiaIkEvPCdkvm3IOzRqkCcyhKicj3pjykaJs1UsCN3S9K172KfY2JwgicnXwe7YDEw/132" } ] }, { "bookId": "3300028078", "userVid": 27351397, "bookmarkId": "3300028078_16_652-681", "chapterUid": 16, "range": "652-681", "markText": "核心 Diff 只关心新旧虚拟节点都存在一组子节点的情况。", "totalCount": 40, "users": [ { "userVid": 65587648, "name": "小范120斤", "nick": "小范120斤", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM7fIEgAnyW9EzU3Aiaf57GtcFeicsLD1upibL8lavaqk14lxp0aGiaIrywME7d9ODlKWBMWNA8dQ8q2Yg/132", "isV": 0, "vDesc": "20240511" }, { "userVid": 327081730, "name": "怀安", "nick": "怀安", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJjJGyrh3lwHCO9VQr5wxwagRZZgndBvR3hmqH8XJR6gHbAdsiaUc1jhwe5FdicTm6SKZm69a9k8PWianeLYQAlT1ibDZljBiaPicZ2M4ibwIz57ZFJQ/132" }, { "userVid": 75472517, "name": "朱凤丽", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/uPBIianicySIDZvEO561XMjY5LIRINQuQE3aVib0I3UcKiaiaLQbhQjgvJXZlXmyHv0cwZDWfsYBvVT2yyROpnTWHVQ/132" } ] }, { "bookId": "3300028078", "userVid": 318911125, "bookmarkId": "3300028078_11_17549-17612", "chapterUid": 11, "range": "17549-17612", "markText": "当为对象添加新属性时,会对 for...in 循环产生影响,所以需要触发与 ITERATE_KEY 相关联的副作用函数重新执行", "totalCount": 39, "users": [ { "userVid": 31831172, "name": "L", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/XkLpBnCb2zJaYIlq0qibiaZZ0WTDiaDMM0dAlPjXOMicNKx9W3ybVO77V06z4BYIj8EpQuAnxJtKwUialNwic4zNXPpalh6kraZEUic6HOEYY2QyKY/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 67234925, "name": "五月", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaELatJJbiaF9lSpXucZbMM6KYl1mqL2BANkSCgyZK4CsJsXic5eGUfTDEtKbFsI74Iiadicm3x8QDb1LDtSyicxyNWJwM6qsLvkCRIah4KJpVwiaBibPA/132" } ] }, { "bookId": "3300028078", "userVid": 377150113, "bookmarkId": "3300028078_11_59396-59443", "chapterUid": 11, "range": "59392-59439", "markText": "通过代理对象来访问元素值时,如果值仍然是可以被代理的,那么得到的值就是新的代理对象而非原始对象", "totalCount": 39, "users": [ { "userVid": 32605696, "name": "L.Chris", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEL0L0mMwYHVdhNFoN0wrDRfEZon5Gv8d8LLJ5auicf9zQ2lG6fbrQick1tAlqA03sS5qtvL20z06xrbElfY6Ng9pWjuy4LTgruuYIgJJA4TH92Q/132" }, { "userVid": 364777477, "name": "VanZZ", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/9Otwibfa5VXRKFcfZNXKia3wUibfcrjqnCP4onACDU8qaB5ia4sR5MzuOA8icgYKgHpa1wDKsciaM2b2JygXv1ib3r7Sw/132" }, { "userVid": 21869720, "name": "Zer0_0", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/MDI0X3jOVf3QVgRARqNGA50icHkOydzUSHgZicLn14yoOzuD9qzHXDthliaaH5qvm7gCbOw6ic2a4iaaDq0TJGr6XtA/132" } ] }, { "bookId": "3300028078", "userVid": 256245195, "bookmarkId": "3300028078_21_17396-17429", "chapterUid": 21, "range": "17396-17429", "markText": "一个函数式组件本质上就是一个普通函数,该函数的返回值是虚拟DOM", "totalCount": 37, "users": [ { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" }, { "userVid": 1310350, "name": "十四画生", "nick": "十四画生", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/2viaqSM1mTMk0VZAEsCQ2JBkQC0ceI5Sah9gkbGbqa2cZiaHyNCqBoibQHNseLtorqialROz23dLTylUdc19Z5ic5mswrFGGtbIw0JuoDEWEVnBw/132" }, { "userVid": 67234925, "name": "五月", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaELatJJbiaF9lSpXucZbMM6KYl1mqL2BANkSCgyZK4CsJsXic5eGUfTDEtKbFsI74Iiadicm3x8QDb1LDtSyicxyNWJwM6qsLvkCRIah4KJpVwiaBibPA/132" } ] }, { "bookId": "3300028078", "userVid": 361766961, "bookmarkId": "3300028078_24_1740-1827", "chapterUid": 24, "range": "1740-1827", "markText": "对于 Vue.js 模板编译器来说,源代码就是组件的模板,而目标代码是能够在浏览器平台上运行的 JavaScript 代码,或其他拥有 JavaScript 运行时的平台代码", "totalCount": 37, "users": [ { "userVid": 261994496, "name": "Godfery", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eruqaxH6bnFLPDwD2FCjIYEV4G9zZ60TonrLRXOoA52KAOf7nfCOoKwNxyGEFcvyLeKs6G9DibfupA/132" }, { "userVid": 28440324, "name": "不求甚解", "nick": "不求甚解", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM6OpNz7k5v5uQCl3AdQIxJrpfiaOYCerTDic7LRQIE5IeNsGpLCVsDWro5cJW20WMRKFW6S3ywalzCg/132" }, { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" } ] }, { "bookId": "3300028078", "userVid": 267749412, "bookmarkId": "3300028078_24_59139-59289", "chapterUid": 24, "range": "59139-59289", "markText": "(1) 分析模板,将其解析为模板 AST。\n(2) 将模板 AST 转换为用于描述渲染函数的 JavaScript AST。\n(3) 根据 JavaScript AST 生成渲染函数代码。", "totalCount": 37, "users": [ { "userVid": 81290498, "name": "橙子", "gender": 2, "avatar": "https://wx.qlogo.cn/mmhead/ibKHP1TZZeXJsAMmfYRwZBaibNkwXSvRDOMVBeQQ8gRsHj0zXp1Y2Ah1lbrNrRAj6z7r1eSiauAstg/0" }, { "userVid": 45227150, "name": "Ary Ana", "nick": "Ary Ana", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/ApE8ibiauTufAXuGgDlRQhze7hD9zAyic4BEKefKFsS4yh5SoM1x4ib1YkSC72gTjOXwjiaud7fEqkf4OwMjnzI44vA/132", "isV": 0, "vDesc": "自學是唯一的學習方法" }, { "userVid": 404312721, "name": "亦草", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTL7zzkGxJdzuibuKRDGib2EIueLqJdWo3vCM2ibdRtbjMqKwMqUiajcDNjtCzVac1p51nn79cMSDR8BsQ/132" } ] }, { "bookId": "3300028078", "userVid": 380958124, "bookmarkId": "3300028078_15_33458-33489", "chapterUid": 15, "range": "33458-33489", "markText": "当更新完成之后,点击事件才从 p 元素冒泡到父级 div 元素", "totalCount": 33, "users": [ { "userVid": 428441863, "name": "夜光", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEJ1ICeljzsVFXQP9ASmVEppXwsgB5zW1ibw4ibiafvsMWTddC0XljZ186ibkUjWtWevnTJRuNAPEiakr4DyiaBcbvEqwSQ9MbZFLq6BFkHtbPJO6rzA/132" }, { "userVid": 393443596, "name": "阿潇", "gender": 0, "avatar": "https://wx.qlogo.cn/mmhead/KK4ZtrLb3wEcRVtVHoPtAkc9S4oZhmFfZR7y8iab6XOk/0" }, { "userVid": 22808461, "name": "子游", "gender": 1, "avatar": "https://wx.qlogo.cn/mmhead/Q3auHgzwzM6pRfuvdcYicACPmLhc7T6icZGvSuRtOHq3UiaDuxBSuA78w/0" } ] }, { "bookId": "3300028078", "userVid": 326056871, "bookmarkId": "3300028078_20_3860-3894", "chapterUid": 20, "range": "3860-3894", "markText": "渲染器中真正完成组件渲染任务的是 mountComponent 函数", "totalCount": 32, "users": [ { "userVid": 221387781, "name": "孙靖翔", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoNatH2A2A0IyWJaJcibyQ3SKq7NtZ6HKRxHKkoLic5sDP1MEbYVFznmWdVm73gBDUTyIdr9yCI6wOQ/132" }, { "userVid": 234587270, "name": "河", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKjTqV3Uhp52qznvwZKybfMJ0t1Z5WicUibHcmtkJIFRVO393iccG6nnqE5VREkj7RLLfq1A6jUyJGvpfGDDRaXjmImjwc14lkqXseFuam2ODSAQ/132" }, { "userVid": 3652871, "name": "冬Don", "gender": 1, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eptQrvOpoyKicicyKtL0ETgG8SZYr8ia9cqlTwAysMSSTRBMk8SYicjdzmPibcqSdQgRiax7CUApKUVPibwA/132" } ] }, { "bookId": "3300028078", "userVid": 309965706, "bookmarkId": "3300028078_10_20744-20759", "chapterUid": 10, "range": "20744-20759", "markText": "effect 是可以发生嵌套的", "totalCount": 29, "users": [ { "userVid": 309965706, "name": "阿黄", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIP3oFIfOCUttqJtLaBo9jHbM7nPdEe2eygvLM5BpuwlS3H94KEF4dHULwxZrLU2dGV9kqweMKicgw/132" }, { "userVid": 506500385, "name": "吴火木", "gender": 0, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLVSicU6zXExkCwhu97MVKJsOS4duBB5xmyRUacOA7Ubu6RHAYzBcMdJBCovWTrUPibA7B5O7JamJvg/132" }, { "userVid": 325588369, "name": "yyaah", "gender": 2, "avatar": "https://thirdwx.qlogo.cn/mmopen/vi_32/pQbArajtYbjglHe4Z7pYPOvK7xFdsRkBVYLibvSFgQKghlThNDOFr75ToFVqeiaDZkfNaBrLVD27ia5PftibEv3htg/132" } ] } ], "chapters": [ { "bookId": "3300028078", "chapterUid": 4, "chapterIdx": 4, "title": "前言" }, { "bookId": "3300028078", "chapterUid": 6, "chapterIdx": 6, "title": "第1章 权衡的艺术" }, { "bookId": "3300028078", "chapterUid": 7, "chapterIdx": 7, "title": "第2章 框架设计的核心要素" }, { "bookId": "3300028078", "chapterUid": 8, "chapterIdx": 8, "title": "第3章 Vue.js 3 的设计思路" }, { "bookId": "3300028078", "chapterUid": 10, "chapterIdx": 10, "title": "第4章 响应系统的作用与实现" }, { "bookId": "3300028078", "chapterUid": 11, "chapterIdx": 11, "title": "第5章 非原始值的响应式方案" }, { "bookId": "3300028078", "chapterUid": 12, "chapterIdx": 12, "title": "第6章 原始值的响应式方案" }, { "bookId": "3300028078", "chapterUid": 14, "chapterIdx": 14, "title": "第7章 渲染器的设计" }, { "bookId": "3300028078", "chapterUid": 15, "chapterIdx": 15, "title": "第8章 挂载与更新" }, { "bookId": "3300028078", "chapterUid": 16, "chapterIdx": 16, "title": "第9章 简单 Diff 算法" }, { "bookId": "3300028078", "chapterUid": 17, "chapterIdx": 17, "title": "第10章 双端 Diff 算法" }, { "bookId": "3300028078", "chapterUid": 18, "chapterIdx": 18, "title": "第11章 快速 Diff 算法" }, { "bookId": "3300028078", "chapterUid": 20, "chapterIdx": 20, "title": "第12章 组件的实现原理" }, { "bookId": "3300028078", "chapterUid": 21, "chapterIdx": 21, "title": "第13章 异步组件与函数式组件" }, { "bookId": "3300028078", "chapterUid": 22, "chapterIdx": 22, "title": "第14章 内建组件和模块" }, { "bookId": "3300028078", "chapterUid": 24, "chapterIdx": 24, "title": "第15章 编译器核心技术概览" }, { "bookId": "3300028078", "chapterUid": 26, "chapterIdx": 26, "title": "第17章 编译优化" }, { "bookId": "3300028078", "chapterUid": 28, "chapterIdx": 28, "title": "第18章 同构渲染" } ] } }
🟠400参数不正确
🟢201参数无意义
修改于 2024-08-21 17:07:06