![](/img/trans.png)
[英]filterDescendants and findDescendant with slate.js
[英]What is the following code snippet from a slate.js example doing?
我試圖通過查看富文本示例來理解 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() 是一種返回 Iterable 的方法。 什么是“const [match]”符號? 這是 javascript 還是打字稿?
(2)是“ match
在”“ const [match]
”一樣的“ match
在”“ match : n => n.type === format
”? 如果是這樣,這是否意味着“ const [match]
”是一個數組,其中一個元素是一個函數? 如果是這樣的話,這似乎很奇怪,那為什么還要讓 Editor.nodes() 返回一個 Iterable 呢?
(3) 我知道雙感嘆號給了我一個布爾對象,但由於我無法理解 match 是函數還是迭代或其他東西,我不知道!!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() 返回一個 Iterable 呢?
這兩個變量完全不同,並且可以(應該?)以不同的方式命名以使事情更清楚。 Editor.nodes() 是Editor
接口/API 的一部分,用於許多不同的事情。 在這種情況下,我們只對第一個元素感興趣。 您可以使用它來查找和迭代 editor.children 中match
函數為其返回 true 的所有節點。
(3) 我知道雙感嘆號給了我一個布爾對象,但是因為我無法理解 match 是函數還是迭代或其他東西,所以我不知道 !!match 的真假我關於 Editor.nodes() 返回的初始迭代。
結果match
是一個node object ,或者undefined
如果它不匹配任何。 一個對象是真的,而 undefined 是假的,做 !! 只是將其轉換為布爾值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.