首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从draftjs中检索文本

如何从draftjs中检索文本
EN

Stack Overflow用户
提问于 2018-08-03 12:53:42
回答 4查看 13.5K关注 0票数 16

我正在尝试编辑一个文本,然后检索它并更新服务器端的数据库

这是我使用的代码

代码语言:javascript
复制
constructor(props,context){
    super(props,context);
    this.handleOnClick = this.handleOnClick.bind(this);

    const processedHTML = DraftPasteProcessor.processHTML(this.props.rule.description.replace(/\n/g, "<br />"));
    const contentState = ContentState.createFromBlockArray(processedHTML); 
    var editorState = EditorState.createWithContent(contentState);
    var editorState = EditorState.moveFocusToEnd(editorState);
    this.state = {editorState: editorState};
    this.onChange = (editorState) => this.setState({editorState});
}



handleOnClick(event) {
   var text = this.state.editorState.getCurrentContent().getBlocksAsArray();
   var finalText;
   text.map((item) => {
   finalText = item.getText() + finalText});
   console.log(finalText)

  render(){

    return(
    <div>
    <Col smOffset={2} mdOffset={1}>
    <PageHeader>
        {this.props.rule.title}
    </PageHeader>
    <Editor
      editorState={this.state.editorState}
      onChange={this.onChange}
    />
    </Col>

     <Col smOffset={2} mdOffset={1}>
    <Button onClick = {this.handleOnClick()}>Update rule</Button>
    </Col>
    </div>
    );

}

但我有一个问题,draftJs返回的文本没有\n所以我会保存格式错误的文本,有没有办法获得带有隔断线的文本?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-03 13:29:28

您可以使用如下所示的DraftJS的convertToRaw函数来获取带断行的文本:

代码语言:javascript
复制
import {
  convertToRaw,
} from 'draft-js';
const blocks = convertToRaw(editorState.getCurrentContent()).blocks;
const value = blocks.map(block => (!block.text.trim() && '\n') || block.text).join('\n');
票数 21
EN

Stack Overflow用户

发布于 2019-05-23 21:09:01

检索文本的最佳方法是使用editorState.getCurrentContent().getPlainText('\u0001')

请注意,函数getPlainText将始终在块之间创建一个空格,因此您需要将\u0001作为参数发送

票数 27
EN

Stack Overflow用户

发布于 2019-11-21 08:35:16

Piyush Zalani的回答几乎是正确的,但如果有一个块没有任何内容,最后的连接会导致附加额外的新行。

这是一个稍微修改过的版本,它正确地说明了只有换行符的块:

代码语言:javascript
复制
    const blocks = convertToRaw(editorState.getCurrentContent()).blocks;
    const mappedBlocks = blocks.map(
      block => (!block.text.trim() && "\n") || block.text
    );

    let newText = "";
    for (let i = 0; i < mappedBlocks.length; i++) {
      const block = mappedBlocks[i];

      // handle last block
      if (i === mappedBlocks.length - 1) {
        newText += block;
      } else {
        // otherwise we join with \n, except if the block is already a \n
        if (block === "\n") newText += block;
        else newText += block + "\n";
      }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51665544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档