来自 slate.js 示例中的以下代码片段在做什么?



我试图通过查看富文本示例来理解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。 一个对象是真实的,而未定义的是假的,并且做!!只是将其转换为布尔值。

最新更新