从官方文档中我了解了两种方法:通过其键获取实体并获取最后创建的实体。在我的例子中,我还需要一种方法来访问当前ContentState中的所有实体。 有没有什么方法可以执行此操作?如果没有,是否有一个可以提供所有实体密钥?
答案 0 :(得分:7)
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;
};
答案 1 :(得分:1)
我如何获取所有实体键:
password = passwordtextField.text
Class A{
var password = ""
@IBOutlet weak var passwordTextField:UITextField!
//save function
password = passwordtextField.text
//pass the data to next class to complete registration
let vc = storyboard?.instantiateViewController(withIdentifier: "BControllerid") as! BViewController
vc.passwordB = password
}
Class BViewController{
var passwordB = ""
//viewDiLoad
request.body = ["password" : passwordB]
//call the request
}
结果:
const contentState = editorState.getCurrentContent()
const entityKeys = Object.keys(convertToRaw(contentState).entityMap)
然后,您可以调用[0, 1]
方法来获取响应实体。
getEntity(key)
的外观如下:
答案 2 :(得分:1)
Bao,您会在名为“ blocks”的键中找到它。
convertToRaw(contentState).blocks.map(el=>el.text)
答案 3 :(得分:0)
不幸的是,您建议使用convertToRaw的方法不起作用,因为它将所有键重新索引为[“ 0”,..,“ n”],但是当您使用编辑器时,实际键会有所不同。新的> n将被添加,未使用的将被省略。
答案 4 :(得分:0)
const rawState = convertToRaw(contentState)
const { entityMap } = rawState;
此entityMap将具有所有实体的列表。但这是一个昂贵的转换。因为,它将把整个东西变成原始的。更好的方法是遍历块并检查实体。
答案 5 :(得分:0)
您必须查看每个字符:
const { editorState } = this.state; // assumes you store `editorState` on `state`
const contentState = editorState.getCurrentContent();
let entities = [];
contentState.getBlockMap().forEach(block => { // could also use .map() instead
block.findEntityRanges(character => {
const charEntity = character.getEntity();
if (charEntity) { // could be `null`
const contentEntity = contentState.getEntity(charEntity);
entities.push(contentEntity);
}
});
});
然后您可以通过以下方式访问它:
entities.forEach((entity, i) => {
if (entity.get('type') === 'ANNOTATION') {
const data = entity.get('data');
// do something
}
})