当前位置: 首页 > 知识库问答 >
问题:

调用onChange时,react quill会失去焦点

逄嘉熙
2023-03-14

我有一个组件包装在antdForm.create()HOC,我想实现我的react-quill编辑器的验证。

          <Form.Item>
            {getFieldDecorator('input', {
              rules: [RequiredRule],
              initialValue: text,
              onChange: this.onChangeText
            })(
              <ReactQuill
                className="question-form__rich-text"
                modules={quillToolbar}
              />,
            )}
          </Form.Item>

如果我开始在我的quill编辑器文本字段中输入,它会触发onChangeText函数,该函数反过来改变本地状态并启动组件的重新渲染

  onChangeText = (_, __, ___, editor) => {
    this.setState({
      textVal: editor.getText(),
    });
  };
 this.state = {
      textVal: '',
    };

每次组件重新命名时,我的文本字段都会失去焦点,因此我必须在字段内单击以键入另一个字母。我注意到只有当

假设我的文本字段最初是空的。我输入字母“a”,它会调用函数3次。首先,它显示文本字段包含字母“a”,然后再次调用函数,显示字段为空,然后再次显示第三次字母“a”。当我继续打字时,这种行为仍然存在。此外,还有一条警告说addRange():给定的范围不在文档中 我不知道这是什么意思。

我已经为这个问题挣扎了几天了,任何帮助都将不胜感激。非常感谢。


共有1个答案

季森
2023-03-14

当按键时它失去焦点的原因可能是因为羽毛笔组件在重新渲染时正在重新创建。看到这个关于打字时失去注意力的问题。

我找不到使用getFieldDecorator在antd上实现react quill的示例,所以我做了一些变通,使其能够工作,但输出相同。请参阅我制作的此工作链接。

const { getFieldDecorator, validateFields, setFieldsValue } = props.form;

const onChangeText = (text) => {
  console.log("called");
  text = text !== "<p><br></p>" ? text : "";
  setFieldsValue({ input: text });
  setTextVal(text);
};


<Form.Item>
  {getFieldDecorator("input", {
    rules: [{ required: true }],
  })(<Input.TextArea style={{ display: "none" }} />)}
  <ReactQuill
    className="question-form__rich-text"
    modules={quillToolbar}
    defaultValue={textVal}
    onChange={onChangeText}
  />
</Form.Item>

正如您在上面的代码中所看到的,我将编辑器放置在getFieldDecorator之外,并将其替换为hidden

另外,您得到的警告addRange():给定的范围不在文档中,在codesandbox上不可见。你可以对此进行调查。

 类似资料:
  • 在嵌入式框架内使用JComboBox时,我确实有一个奇怪的焦点问题。 我创建了一个新的Shell 我用来创建嵌入式框架的外壳,如 我添加了一个JComboBox(有2个元素)到rootGroup。当我选择ComboBox打开下拉菜单时,我可以拖放shell窗口,而不会丢失组合框中的焦点。 当外壳窗口移动到另一个屏幕区域时,下拉菜单仍然在屏幕上的同一位置。下拉菜单不再显示在组合框下面。 我试图为某些

  • 在我的活动中,我有一个editText字段。当用户点击它时,editText获得焦点并出现键盘。现在,当用户按下手机上的硬件后退按钮时,键盘会消失,但光标仍保留在Edittext中,即它仍然具有焦点。当按下后退按钮时,是否有可能使EditText失去焦点?我尝试使用以下代码,但它不起作用:

  • 我正在使用构建组件,其中我有一个文本字段列表。 我在redux中存储数据。 每个保留每个

  • 当失去焦点时,我需要捕捉,我搜索了其他问题,但没有找到答案。 我这样使用 但是,这对我不起作用。

  • 问题内容: 我正在制作动态表格。一个有值的列表。每个值由一个字符串表示。 我的组件中有一个函数,可以向该字段添加新值。 值和按钮在我的HTML中这样显示。 一旦我在值的输入中写入一些文本,输入就会失去焦点。如果我在一个字段中添加了多个值,并且在一个输入值中写入了一个字符,则该输入将失去焦点,并且该字符将写入每个输入中。 问题答案: 当数组是原始类型(在您的情况下是数组)时,会发生这种情况。这可以通

  • 我遇到了一个奇怪的错误,我的搜索输入组件,它失去了对每个按键的关注,不知道为什么。 我还得到了一个