我试图通过查看富文本示例来理解Slate.js,我遇到了以下代码片段,我不明白。
const isBlockActive = (editor, format) => {
const [match] = Editor.nodes(editor, {
match: n => n.type === format,
})
return !!match
}
我不是javascript的专家,而且我对打字稿和slate都是新手.js所以我提前为无法更好地构建我的问题而道歉,但这是我目前的理解和我仍然不确定的:
(1( Editor.nodes(( 是一个返回 Iterable 的方法。 什么是"const [match]"表示法? 这是javascript还是打字稿?
(2("const [match]
"中的"match
"与"match : n => n.type === format
"中的"match
"相同吗? 如果是这样,这是否意味着"const [match]
"是一个数组,有一个元素是一个函数? 如果是这样的话,这似乎很奇怪,那么为什么要费心让 Editor.nodes(( 返回一个可迭代的呢?
(3(我知道双感叹号给了我一个布尔对象,但是由于我无法弄清楚匹配是函数还是可迭代对象或其他东西,我不知道!!match
的真实或虚假告诉我Editor.nodes((返回的初始可迭代对象是什么。
谢谢你能够照亮我混乱的大脑的任何光芒!
这称为数组解构。match
是一个变量,其中包含Editor.nodes
函数返回的数组的第一个元素(或者更确切地说是迭代器生成的第一个值(。它勉强等于:
const match = Editor.nodes(...)[0];
或者更准确地说:
const _it = Editor.nodes(...)[Symbol.iterator]().next();
const match = _it.done ? undefined : _it.value;
(1( Editor.nodes(( 是一个返回 Iterable 的方法。什么是"const [match]"表示法?这是javascript还是打字稿?
它是JavaScript(和TypeScript(数组解构。 Editor.nodes 返回一个迭代对象,该可迭代对象被迭代以创建一个数组,并且该数组的第一个元素被分配给match
。 我们只对是否存在至少一个匹配项感兴趣,因此查看数组的第一个元素会告诉我们这一点。
(2("const [match]"中的"match"与"match : n => n.type === format"中的"match"相同吗?如果是这样,这是否意味着"const [match]"是一个数组,其中一个元素是一个函数?如果是这样的话,这似乎很奇怪,那么为什么要费心让 Editor.nodes(( 返回一个可迭代的呢?
这两个变量是完全不同的,并且本可以(应该?(以不同的方式命名以使事情更加清晰。 Editor.nodes(( 是Editor
接口/API 的一部分,用于许多不同的事情。 在这种情况下,我们只对第一个元素感兴趣。 您可以使用它来查找和迭代 editor.children 中的所有节点,您的match
函数返回 true 的节点。
(3(我知道双感叹号给了我一个布尔对象,但是由于我无法弄清楚匹配是函数还是可迭代对象或其他东西,我不知道真假是什么!!match告诉我Editor.nodes((返回的初始可迭代对象。
生成的match
是一个节点对象,如果它与任何对象不匹配,则undefined
。 一个对象是真实的,而未定义的是假的,并且做!!只是将其转换为布尔值。