slate.js 示例中的以下代码片段在做什么?
What is the following code snippet from a slate.js example doing?
我试图通过查看 rich text example 来理解 Slate.js,但我遇到了以下代码片段,我不明白。
const isBlockActive = (editor, format) => {
const [match] = Editor.nodes(editor, {
match: n => n.type === format,
})
return !!match
}
我不是 javascript 方面的专家,而且我对 typescript 和 slate.js 都是新手,所以我提前为无法更好地表达我的问题而道歉,但这就是我的意思目前了解和不确定的地方:
(1) Editor.nodes() 是一种 return 可迭代的方法。 "const [match]" 表示法是什么?这是 javascript 还是打字稿?
(2)“const [match]
”中的“match
”与“match : n => n.type === format
”中的“match
”是否相同?如果是这样,是否意味着“const [match]
”是一个数组,其中一个元素是一个函数?如果真是这样,那似乎很奇怪,那么为什么还要费心使 Editor.nodes() return 成为 Iterable 呢?
(3) 我知道双感叹号给了我一个布尔对象,但由于我无法理解 match 是一个函数还是一个可迭代对象还是其他东西,所以我不知道是真是假!!match
告诉我关于 Editor.nodes() 的初始迭代 return。
感谢您为我困惑的大脑提供的任何启发!
这就是所谓的数组解构。 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() is a method which returns an Iterable. What is the "const [match]" notation? Is this javascript or typescript?
它是 JavaScript(和 TypeScript)数组解构。 Editor.nodes returns 迭代创建数组的可迭代对象,并将该数组的第一个元素分配给 match
。我们只对是否至少有一个匹配感兴趣,因此查看数组的第一个元素会告诉我们这一点。
(2) Is the "match" in "const [match]" the same as the "match" in "match : n => n.type === format"? If so, does that mean "const [match]" is an array with one element which is a function? It seems odd if that were the case as then why bother making Editor.nodes() return an Iterable at all?
这两个变量完全不同,可以(应该?)以不同的方式命名以使事情更清楚。 Editor.nodes() 是 Editor
interface/API 的一部分,用于许多不同的事情。在这种情况下,我们只对第一个元素感兴趣。您可以使用它来查找并遍历 editor.children 中的所有节点,您的 match
函数 returns 为真。
(3) I know double exclamation points give me a Boolean object, but since I can't wrap my head around whether match is a function or an iterable or something else, I have no idea what the truth or falsity of !!match tells me about the initial iterable returned by Editor.nodes().
结果 match
是一个 节点对象 ,或者 undefined
如果它不匹配.一个对象是真实的,而未定义是虚假的,并且正在做!只是将其转换为布尔值。
我试图通过查看 rich text example 来理解 Slate.js,但我遇到了以下代码片段,我不明白。
const isBlockActive = (editor, format) => {
const [match] = Editor.nodes(editor, {
match: n => n.type === format,
})
return !!match
}
我不是 javascript 方面的专家,而且我对 typescript 和 slate.js 都是新手,所以我提前为无法更好地表达我的问题而道歉,但这就是我的意思目前了解和不确定的地方:
(1) Editor.nodes() 是一种 return 可迭代的方法。 "const [match]" 表示法是什么?这是 javascript 还是打字稿?
(2)“const [match]
”中的“match
”与“match : n => n.type === format
”中的“match
”是否相同?如果是这样,是否意味着“const [match]
”是一个数组,其中一个元素是一个函数?如果真是这样,那似乎很奇怪,那么为什么还要费心使 Editor.nodes() return 成为 Iterable 呢?
(3) 我知道双感叹号给了我一个布尔对象,但由于我无法理解 match 是一个函数还是一个可迭代对象还是其他东西,所以我不知道是真是假!!match
告诉我关于 Editor.nodes() 的初始迭代 return。
感谢您为我困惑的大脑提供的任何启发!
这就是所谓的数组解构。 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() is a method which returns an Iterable. What is the "const [match]" notation? Is this javascript or typescript?
它是 JavaScript(和 TypeScript)数组解构。 Editor.nodes returns 迭代创建数组的可迭代对象,并将该数组的第一个元素分配给 match
。我们只对是否至少有一个匹配感兴趣,因此查看数组的第一个元素会告诉我们这一点。
(2) Is the "match" in "const [match]" the same as the "match" in "match : n => n.type === format"? If so, does that mean "const [match]" is an array with one element which is a function? It seems odd if that were the case as then why bother making Editor.nodes() return an Iterable at all?
这两个变量完全不同,可以(应该?)以不同的方式命名以使事情更清楚。 Editor.nodes() 是 Editor
interface/API 的一部分,用于许多不同的事情。在这种情况下,我们只对第一个元素感兴趣。您可以使用它来查找并遍历 editor.children 中的所有节点,您的 match
函数 returns 为真。
(3) I know double exclamation points give me a Boolean object, but since I can't wrap my head around whether match is a function or an iterable or something else, I have no idea what the truth or falsity of !!match tells me about the initial iterable returned by Editor.nodes().
结果 match
是一个 节点对象 ,或者 undefined
如果它不匹配.一个对象是真实的,而未定义是虚假的,并且正在做!只是将其转换为布尔值。