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

为什么React会针对具有由React管理子元素的contentEditable组件发出警告?

沈宇定
2023-03-14
问题内容

渲染组件时收到以下警告:

警告:组件 由React
组成contentEditable,包含children。现在,您有责任保证所有这些节点均不会意外修改或重复。这可能不是故意的。

这是我的组件:

import React, { Component } from "react";

export default class Editable extends Component {
  render() {
    return (
      <div contentEditable={true} onBlur={this.props.handleBlur}>
        {this.props.children}
      </div>
    );
  }
}

React想要警告我的代码潜在的问题是什么?通过阅读https://reactjs.org/docs/dom-
elements.html上
的文档,我不太了解。

我以为我的组件应该完全像托管输入字段一样工作,没有任何问题:

  1. this.props.children 是初始值
  2. onBlur回调更新从道具event.target.innerHTML
  3. 用新道具渲染组件

问题答案:

设置contenteditablehtml属性可以在浏览器中修改该元素的内容。React警告您在该元素中有由React管理的子级。React仅从上至下起作用。这意味着它在顶层管理模型并维护表示该数据的虚拟DOM,然后基于该虚拟DOM渲染DOM树。您在React之外对DOM所做的任何更改(例如设置contenteditable和允许用户直接在浏览器中编辑内容)都可能被删除,或者在更新那些托管元素时给React带来麻烦。

在您所处的情况下,您不必担心{this.props.children}节点会被炸毁,因为您知道自己正在捕获更改并对其进行所需的操作。只是警告您,当您让内容直接由浏览器编辑时,最好不要期望该节点保持完整并被React准确地更新。

如果您知道自己在做什么(现在看起来像您一样),则可以通过添加来消除该警告suppressContentEditableWarning={true}



 类似资料:
  • 在呈现组件时,我得到以下警告: 我想我的组件应该完全像托管输入字段那样工作,没有任何问题: 是初始值 回调更新中的道具 使用新道具呈现组件

  • 问题内容: 我希望能够弄清楚哪些React组件与某个DOM元素相关联。 例如,假设我有一个div,并且正在使用React渲染整个应用程序。div必须由React组件呈现-但是哪一个呢? 我知道React提供了方法“ getDOMNode ”来获取与React组件相关联的DOM节点,但是我想做相反的事情。 这可能吗? 问题答案: 没有。 React中的中心概念是您实际上在DOM中没有控件。相反,您的

  • 本文向大家介绍在React中组件和元素有什么区别?相关面试题,主要包含被问及在React中组件和元素有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 组件首字母大写 组件是由元素构成的。元素数据结构是普通对象,而组件数据结构是类或纯函数

  • 问题内容: 我这里有这个组件。我想将调用处理程序传递给我创建的每个listElement。如果我像下面那样使用,则可以正常运行。问题是我从控制台的React收到此警告: 如果我不绑定它,我的孩子们将不了解呼叫处理程序。我可以做些什么? PS: 我知道解构作业,如http://facebook.github.io/react/docs/transferring- props.html#transfe

  • 本文向大家介绍react怎么拿到组件对应的DOM元素?相关面试题,主要包含被问及react怎么拿到组件对应的DOM元素?时的应答技巧和注意事项,需要的朋友参考一下 refs.