我无法从 draft-js 获得 html 输出?
I can't get the html output from draft-js?
我一直在玩 Facebook 的 draft-js,但我实际上无法弄清楚如何获得编辑器的 html 输出。下面例子中的 console.log 输出了一些 _map
的属性,但是它们好像没有包含我的实际内容?
class ContentContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
value: '',
editorState: EditorState.createEmpty()
};
this.onChange = (editorState) => this.setState({editorState});
this.createContent = this.createContent.bind(this);
}
createContent() {
console.log(this.state.editorState.getCurrentContent());
}
render() {
const {editorState} = this.state;
const { content } = this.props;
return (
<Template>
<br /><br /><br />
<ContentList content={content} />
<div className="content__editor">
<Editor editorState={editorState} onChange={this.onChange} ref="content"/>
</div>
<FormButton text="Create" onClick={this.createContent.bind(this)} />
</Template>
);
}
}
我使用了一个方便的库,draft-js-export-html。导入库,你应该能够在调用函数后看到 HTML,stateToHTML
:
console.log(stateToHTML(this.state.editorState.getCurrentContent()));
我是 React 的新手,希望这对你有用。我查看了 contentState
的幕后情况,那里发生了一些事情,这使得使用库来解析实体变得更加诱人。
作者 sstur, 我在那里了解了他的图书馆。
有只读属性只生成 HTML:
<Editor editorState={editorState} readOnly/>
伊万。我也在玩 Draft.js 并遇到了同样的问题。实际上,Victor 提供了一个很好的解决方案。
这是我找到的两个库。 Victor 提到的那个在 GitHub.
上有更多的星数
https://github.com/sstur/draft-js-export-html
https://github.com/rkpasia/draft-js-exporter
我只想补充一点,有一种方法可以在不使用外部库的情况下打印出内容(以 JSON 格式)。它记录在数据转换会话下。
下面是我使用 "convertToRaw" 函数
打印用户输入的方法
console.log(convertToRaw(yourEditorContentState.getCurrentContent()));
确保您从 Draft.js 导入了 convertToRaw 函数,方法是:
import { convertFromRaw, convertToRaw } from 'draft-js';
这是 rajaraodv 写的一篇很棒的博客,名为 How Draft.js Represents Rich Text Data。详细解释了数据转换。
如果不愿意在您的代码中添加另一个库,@farincz 的方法可以很好地工作。
<Editor editorState={this.state.editorState} readOnly/>
编辑器状态可以直接存储在您的存储层中,当您将其渲染到 DOM 时,它很容易获得并且可以帮助编辑。
通过单击文本,您可以将其设为可编辑,或将单击与编辑按钮绑定。您不能直接将 click 绑定到 'Editor' 组件,但可以将其放在包含 'Editor'.
的包装器上
<div className="editor" onClick={this.editContent.bind(this)}>
<Editor
editorState={this.state.editorState}
onChange={this.onChange}
handleKeyCommand={this.handleKeyCommand}
readOnly={this.state.edit}
/>
</div>
只需将 'edit' 添加到您的状态为真,确保 readOnly 为真(您可以使状态的名称 'edit' 更明显,如果它令人困惑)。
this.state = {
editorState: EditorState.createEmpty(),
edit: true
};
最后在点击
时将 'edit' 的值更改为 false
editContent() {
this.setState({
edit: false
})
}
为了扩展上面共享的库,这里有另一个很好的库:draftjs-to-html
它将原始编辑器状态(JSON 对象)转换为普通 HTML。
import draftToHtml from 'draftjs-to-html';
import {convertToRaw} from "draft-js";
const rawContentState = convertToRaw(editorState.getCurrentContent());
const markup = draftToHtml(rawContentState);
我一直在玩 Facebook 的 draft-js,但我实际上无法弄清楚如何获得编辑器的 html 输出。下面例子中的 console.log 输出了一些 _map
的属性,但是它们好像没有包含我的实际内容?
class ContentContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
value: '',
editorState: EditorState.createEmpty()
};
this.onChange = (editorState) => this.setState({editorState});
this.createContent = this.createContent.bind(this);
}
createContent() {
console.log(this.state.editorState.getCurrentContent());
}
render() {
const {editorState} = this.state;
const { content } = this.props;
return (
<Template>
<br /><br /><br />
<ContentList content={content} />
<div className="content__editor">
<Editor editorState={editorState} onChange={this.onChange} ref="content"/>
</div>
<FormButton text="Create" onClick={this.createContent.bind(this)} />
</Template>
);
}
}
我使用了一个方便的库,draft-js-export-html。导入库,你应该能够在调用函数后看到 HTML,stateToHTML
:
console.log(stateToHTML(this.state.editorState.getCurrentContent()));
我是 React 的新手,希望这对你有用。我查看了 contentState
的幕后情况,那里发生了一些事情,这使得使用库来解析实体变得更加诱人。
作者 sstur,
有只读属性只生成 HTML:
<Editor editorState={editorState} readOnly/>
伊万。我也在玩 Draft.js 并遇到了同样的问题。实际上,Victor 提供了一个很好的解决方案。
这是我找到的两个库。 Victor 提到的那个在 GitHub.
上有更多的星数https://github.com/sstur/draft-js-export-html
https://github.com/rkpasia/draft-js-exporter
我只想补充一点,有一种方法可以在不使用外部库的情况下打印出内容(以 JSON 格式)。它记录在数据转换会话下。
下面是我使用 "convertToRaw" 函数
打印用户输入的方法console.log(convertToRaw(yourEditorContentState.getCurrentContent()));
确保您从 Draft.js 导入了 convertToRaw 函数,方法是:
import { convertFromRaw, convertToRaw } from 'draft-js';
这是 rajaraodv 写的一篇很棒的博客,名为 How Draft.js Represents Rich Text Data。详细解释了数据转换。
如果不愿意在您的代码中添加另一个库,@farincz 的方法可以很好地工作。
<Editor editorState={this.state.editorState} readOnly/>
编辑器状态可以直接存储在您的存储层中,当您将其渲染到 DOM 时,它很容易获得并且可以帮助编辑。
通过单击文本,您可以将其设为可编辑,或将单击与编辑按钮绑定。您不能直接将 click 绑定到 'Editor' 组件,但可以将其放在包含 'Editor'.
的包装器上<div className="editor" onClick={this.editContent.bind(this)}>
<Editor
editorState={this.state.editorState}
onChange={this.onChange}
handleKeyCommand={this.handleKeyCommand}
readOnly={this.state.edit}
/>
</div>
只需将 'edit' 添加到您的状态为真,确保 readOnly 为真(您可以使状态的名称 'edit' 更明显,如果它令人困惑)。
this.state = {
editorState: EditorState.createEmpty(),
edit: true
};
最后在点击
时将 'edit' 的值更改为 falseeditContent() {
this.setState({
edit: false
})
}
为了扩展上面共享的库,这里有另一个很好的库:draftjs-to-html
它将原始编辑器状态(JSON 对象)转换为普通 HTML。
import draftToHtml from 'draftjs-to-html';
import {convertToRaw} from "draft-js";
const rawContentState = convertToRaw(editorState.getCurrentContent());
const markup = draftToHtml(rawContentState);