如何在 React-quill 中显示字符计数器
How to show character counter in a React-quill
我想在我的 React Quill 上添加一个字符计数器。
目前我的字符限制器为 950。
问题是用户必须知道字符数不能超过 950,因此字符计数器
我试过在渲染器上添加 getLength()
但给了我一个错误。
这是我的代码:
attachQuillRefs = () => {
if (typeof this.reactQuillRef.getEditor !== "function") return;
this.quillRef = this.reactQuillRef.getEditor();
};
//Handles changes to description field
handleDetailChange(value) {
var limit = 950;
var quill = this.quillRef;
quill.on("text-change", function (delta, old, source) {
if (quill.getLength() > limit) {
quill.deleteText(limit, quill.getLength());
}
});
this.setState({
detail: value,
});
}
在渲染时:
<ReactQuill
ref={(el) => {
this.reactQuillRef = el;
}}
onChange={this.handleDetailChange}
value={this.state.detail || ""}
>
<p>{this.reactQuillRef.getLength() + "/950"}</p>
</ReactQuill>
1) 创建一个自定义模块并使用 qill 注册它,如下所示。
class Counter {
constructor(quill, options) {
this.quill = quill;
this.options = options;
this.container = document.querySelector(options.container);
quill.on('text-change', this.update.bind(this));
this.update(); // Account for initial contents
}
calculate() {
let text = this.quill.getText().trim();
if (this.options.unit === 'word') {
text = text.trim();
// Splitting empty text returns a non-empty array
return text.length > 0 ? text.split(/\s+/).length : 0;
} else {
return text.length;
}
}
update() {
var length = this.calculate();
var label = this.options.unit;
if (length !== 1) {
label += 's';
}
this.container.innerText = length + ' ' + label;
}
}
Quill.register('modules/counter', Counter);
2) 然后将下面的代码添加到模块中,如图所示。
counter: {
container: '#counter',
unit: 'character'
}
3) 现在您可以在带有计数器 ID 的 quilleditor 标签下添加一个新的 div 标签。
<ReactQuill
ref={(el) => {
this.reactQuillRef = el;
}}
onChange={this.handleDetailChange}
value={this.state.detail || ""}
>
<p>{this.reactQuillRef.getLength() + "/950"}</p>
</ReactQuill>
<div id="counter">0</div>
react-quill 事件处理程序公开 4 个参数,如下所示:
onChange(content, delta, source, editor)
第 4 个参数 editor
是对公开 Quill API.
受限子集的“非特权”编辑器的引用
提供的方法之一是 getLength()
returns 字符的内容长度。
https://github.com/zenoamaro/react-quill#the-unprivileged-editor
这解决了长度计算。
从限制开始,您可以显示的不是输入的字符数,而是 950 减去所述数字,在超出限制时变为红色的元素中(剩余少于零个字符)。
我想在我的 React Quill 上添加一个字符计数器。
目前我的字符限制器为 950。
问题是用户必须知道字符数不能超过 950,因此字符计数器
我试过在渲染器上添加 getLength()
但给了我一个错误。
这是我的代码:
attachQuillRefs = () => {
if (typeof this.reactQuillRef.getEditor !== "function") return;
this.quillRef = this.reactQuillRef.getEditor();
};
//Handles changes to description field
handleDetailChange(value) {
var limit = 950;
var quill = this.quillRef;
quill.on("text-change", function (delta, old, source) {
if (quill.getLength() > limit) {
quill.deleteText(limit, quill.getLength());
}
});
this.setState({
detail: value,
});
}
在渲染时:
<ReactQuill
ref={(el) => {
this.reactQuillRef = el;
}}
onChange={this.handleDetailChange}
value={this.state.detail || ""}
>
<p>{this.reactQuillRef.getLength() + "/950"}</p>
</ReactQuill>
1) 创建一个自定义模块并使用 qill 注册它,如下所示。
class Counter {
constructor(quill, options) {
this.quill = quill;
this.options = options;
this.container = document.querySelector(options.container);
quill.on('text-change', this.update.bind(this));
this.update(); // Account for initial contents
}
calculate() {
let text = this.quill.getText().trim();
if (this.options.unit === 'word') {
text = text.trim();
// Splitting empty text returns a non-empty array
return text.length > 0 ? text.split(/\s+/).length : 0;
} else {
return text.length;
}
}
update() {
var length = this.calculate();
var label = this.options.unit;
if (length !== 1) {
label += 's';
}
this.container.innerText = length + ' ' + label;
}
}
Quill.register('modules/counter', Counter);
2) 然后将下面的代码添加到模块中,如图所示。
counter: {
container: '#counter',
unit: 'character'
}
3) 现在您可以在带有计数器 ID 的 quilleditor 标签下添加一个新的 div 标签。
<ReactQuill
ref={(el) => {
this.reactQuillRef = el;
}}
onChange={this.handleDetailChange}
value={this.state.detail || ""}
>
<p>{this.reactQuillRef.getLength() + "/950"}</p>
</ReactQuill>
<div id="counter">0</div>
react-quill 事件处理程序公开 4 个参数,如下所示:
onChange(content, delta, source, editor)
第 4 个参数 editor
是对公开 Quill API.
受限子集的“非特权”编辑器的引用
提供的方法之一是 getLength()
returns 字符的内容长度。
https://github.com/zenoamaro/react-quill#the-unprivileged-editor
这解决了长度计算。
从限制开始,您可以显示的不是输入的字符数,而是 950 减去所述数字,在超出限制时变为红色的元素中(剩余少于零个字符)。