簡體   English   中英

以下來自 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM