当前位置: 首页 > 面试题库 >

如何限制草稿js的最大长度

松雅昶
2023-03-14
问题内容

如何限制草稿js中的最大字符数?

我可以得到类似状态的长度,但是如何停止更新组件呢?

var length = editorState.getCurrentContent().getPlainText('').length;

问题答案:

您应该定义handleBeforeInput和支持handlePastedText。在处理程序函数中,您检查当前内容的长度+粘贴文本的长度,如果达到最大值,则应返回'handled'字符串。

UPD 21.03.2018:升级到最新版本的react / react-dom(16.2.0)和Draft.js(0.10.5)。

工作示例-https://jsfiddle.net/Ln1hads9/11/

const {Editor, EditorState} = Draft;

const MAX_LENGTH = 10;

class Container extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      editorState: EditorState.createEmpty()
    };
  }
  render() {
    return (
      <div className="container-root">
        <Editor
          placeholder="Type away :)"
          editorState={this.state.editorState}
          handleBeforeInput={this._handleBeforeInput}
          handlePastedText={this._handlePastedText}
          onChange={this._handleChange}
        />
      </div>
    );
  }

  _getLengthOfSelectedText = () => {
    const currentSelection = this.state.editorState.getSelection();
    const isCollapsed = currentSelection.isCollapsed();

    let length = 0;

    if (!isCollapsed) {
      const currentContent = this.state.editorState.getCurrentContent();
      const startKey = currentSelection.getStartKey();
      const endKey = currentSelection.getEndKey();
      const startBlock = currentContent.getBlockForKey(startKey);
      const isStartAndEndBlockAreTheSame = startKey === endKey;
      const startBlockTextLength = startBlock.getLength();
      const startSelectedTextLength = startBlockTextLength - currentSelection.getStartOffset();
      const endSelectedTextLength = currentSelection.getEndOffset();
      const keyAfterEnd = currentContent.getKeyAfter(endKey);
      console.log(currentSelection)
      if (isStartAndEndBlockAreTheSame) {
        length += currentSelection.getEndOffset() - currentSelection.getStartOffset();
      } else {
        let currentKey = startKey;

        while (currentKey && currentKey !== keyAfterEnd) {
          if (currentKey === startKey) {
            length += startSelectedTextLength + 1;
          } else if (currentKey === endKey) {
            length += endSelectedTextLength;
          } else {
            length += currentContent.getBlockForKey(currentKey).getLength() + 1;
          }

          currentKey = currentContent.getKeyAfter(currentKey);
        };
      }
    }

    return length;
  }

  _handleBeforeInput = () => {
    const currentContent = this.state.editorState.getCurrentContent();
    const currentContentLength = currentContent.getPlainText('').length;
    const selectedTextLength = this._getLengthOfSelectedText();

    if (currentContentLength - selectedTextLength > MAX_LENGTH - 1) {
      console.log('you can type max ten characters');

      return 'handled';
    }
  }

  _handlePastedText = (pastedText) => {
    const currentContent = this.state.editorState.getCurrentContent();
    const currentContentLength = currentContent.getPlainText('').length;
    const selectedTextLength = this._getLengthOfSelectedText();

    if (currentContentLength + pastedText.length - selectedTextLength > MAX_LENGTH) {
      console.log('you can type max ten characters');

      return 'handled';
    }
  }

  _handleChange = (editorState) => {
    this.setState({ editorState });
  }
}

ReactDOM.render(<Container />, document.getElementById('react-root'))


 类似资料:
  • 问题内容: 我正在使用PostgreSQL,并且在表中有一列,其中包含非常长的文本。我想在查询中选择此列,但限制其显示长度。 就像是: 我该怎么做? 问题答案: 您可以做的是使用PostgreSQL的substring()方法。以下两个命令之一将起作用:

  • 草稿是没有日期的文章。它们是你还在创作中而暂时不想发表的文章。想要开始使用草稿,你需要在网站根目录下创建一个名为 _drafts 的文件夹(如在目录结构章节里描述的),并新建你的第一份草稿: |-- _drafts/ | |-- a-draft-post.md 为了预览你拥有草稿的网站,运行带有 --drafts 配置选项的 jekyll serve 或者 jekyll build。此两种方法

  • 我有一个带有SpringWeb服务的SpringBoot2应用程序,我试图限制传入请求的最大大小。我尝试使用以下属性,但不起作用。 您知道使用SpringWeb服务在SpringBoot2应用程序中限制传入请求最大大小的任何有效解决方案吗?在Spring Web服务文档中,有信息表明Spring Web服务提供了基于Sun的JRE 1.6 HTTP服务器的传输。也许这是个问题?

  • 本文向大家介绍关于URL最大长度限制的相关资料查证,包括了关于URL最大长度限制的相关资料查证的使用技巧和注意事项,需要的朋友参考一下 在开发调试支付宝接口时,突然发现支付宝接口的URL很长,远远大于之前自己印象中的255个字符。赶紧搜索查证了一番,理解如下: URL不能大于255bytes的说法确实存在,在RFC2616中提到: 从上一点也可以看出,255bytes的说法也是为了兼容性考虑。实际

  • 问题内容: 我想限制a的最大大小,以对正在实现的各种哈希算法进行度量。我在的一个重载构造函数中查看了loadfactor 。 我尝试在构造函数中将loadFactor设置为0.0f(这意味着我不希望HashMap的大小从EVER增大),但将此无效: 还有另一种方法来限制它的大小,使其永远不会增长吗? 问题答案: 有时越简单越好。

  • 问题内容: 我是否可以使用Spring Security来限制能够同时登录网站的最大用户数量? 绝对不是并发会话控制参数。例如,我要限制最大只允许1000个用户同时登录。如果超过该通知页面说明已超过最大用户数 问题答案: 您可以通过访问SessionRegistry来查找当前登录的用户,从而使用Spring Security的并发会话控制。在Spring Security 3中,Concurren