2017-09-24 80 views
1

從官方文檔我知道關於2種方法:通過其密鑰獲取實體並獲取最後創建的實體。就我而言,我還需要一種方法來訪問當前ContentState中的所有實體。 有什麼方法可以執行此操作嗎?如果沒有,是否有一個可以提供所有實體密鑰? 感謝Draft.js。如何從ContentState獲取所有實體數據

+0

爲什麼不保留一組您創建的實體? –

+0

謝謝你的回答。我也會試試這個。問題是當用戶用實體刪除範圍時,自動從這個集合中刪除一個實體 –

回答

3

const getEntities = (editorState, entityType = null) => { 
 
    const content = editorState.getCurrentContent(); 
 
    const entities = []; 
 
    content.getBlocksAsArray().forEach((block) => { 
 
     let selectedEntity = null; 
 
     block.findEntityRanges(
 
      (character) => { 
 
       if (character.getEntity() !== null) { 
 
        const entity = content.getEntity(character.getEntity()); 
 
        if (!entityType || (entityType && entity.getType() === entityType)) { 
 
         selectedEntity = { 
 
          entityKey: character.getEntity(), 
 
          blockKey: block.getKey(), 
 
          entity: content.getEntity(character.getEntity()), 
 
         }; 
 
         return true; 
 
        } 
 
       } 
 
       return false; 
 
      }, 
 
      (start, end) => { 
 
       entities.push({...selectedEntity, start, end}); 
 
      }); 
 
    }); 
 
    return entities; 
 
};

0

爲讓所有實體對象和按鍵如問題

converToRaw提供了整個國家的JS對象要求的可能方法。然後你可以訪問entityMap這將返回一個實體數組。

const raw = convertToRaw(this.state.editorState.getCurrentContent()) 
console.log(raw.entityMap) 

您可能需要檢查由於convertToRaw方法調用而導致的性能影響。

鍵可以作爲被訪問......

const keys = Object.keys(raw.entityMap) 

我還沒有爲簡潔空檢查。