我需要在工具栏部分添加自定义下拉菜单。
这里的图片类似于想要的下拉菜单,这是可能的吗?
<img src="https://i.imgur.com/OhYeFsL.png" alt="Dropdown menu editor">
在下面找到详细的图像
我使用了react-draft-wysiwyg内容编辑器。
https://github.com/jpuri/react-draft-wysiwyg
https://jpuri.github.io/react-draft-wysiwyg/#/d
在工具栏部分添加自定义下拉菜单。
我希望这仍然有意义,但这是我的方式。
对于自定义下拉列表,我从文档https://jpuri.github.io/react-draft-wysiwyg/#/docs中创建了一个新组件,并使用了“向工具栏添加新选项”的方法>
import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { EditorState, Modifier } from 'draft-js'; class Placeholders extends Component { static propTypes = { onChange: PropTypes.func, editorState: PropTypes.object, } state = { open: false } openPlaceholderDropdown = () => this.setState({open: !this.state.open}) addPlaceholder = (placeholder) => { const { editorState, onChange } = this.props; const contentState = Modifier.replaceText( editorState.getCurrentContent(), editorState.getSelection(), placeholder, editorState.getCurrentInlineStyle(), ); onChange(EditorState.push(editorState, contentState, 'insert-characters')); } placeholderOptions = [ {key: "firstName", value: "{{firstName}}", text: "First Name"}, {key: "lastName", value: "{{lastName}}", text: "Last name"}, {key: "company", value: "{{company}}", text: "Company"}, {key: "address", value: "{{address}}", text: "Address"}, {key: "zip", value: "{{zip}}", text: "Zip"}, {key: "city", value: "{{city}}", text: "City"} ] listItem = this.placeholderOptions.map(item => ( <li onClick={this.addPlaceholder.bind(this, item.value)} key={item.key} className="rdw-dropdownoption-default placeholder-li" >{item.text}</li> )) render() { return ( <div onClick={this.openPlaceholderDropdown} className="rdw-block-wrapper" aria-label="rdw-block-control"> <div className="rdw-dropdown-wrapper rdw-block-dropdown" aria-label="rdw-dropdown"> <div className="rdw-dropdown-selectedtext" title="Placeholders"> <span>Placeholder</span> <div className={`rdw-dropdown-caretto${this.state.open? "close": "open"}`}></div> </div> <ul className={`rdw-dropdown-optionwrapper ${this.state.open? "": "placeholder-ul"}`}> {this.listItem} </ul> </div> </div> ); } } export default Placeholders;
我使用自定义下拉列表添加占位符。但是本质仍然保持不变,因为我将文档中的示例用于自定义按钮。
为了呈现按钮本身,我使用了与其他下拉按钮相同的样式,类和结构。我只是将锚标签切换为div标签,并为悬停样式和胡萝卜更改添加了自定义类。我还使用事件来切换类。
.placeholder-ul{ visibility: hidden; } .placeholder-li:hover { background: #F1F1F1; }
最后,请不要忘记导入自定义按钮并将其添加到编辑器。
<Editor
editorState={this.state.editorState}
onEditorStateChange={this.onEditorStateChange}
toolbarCustomButtons={[<Placeholders />]}
/>
我使用Tomas的代码,并将其更新为TypeScript / Function组件。可以同意该解决方案在Draft.js v0.10.5中在2020年仍可使用]