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

为什么React不缓存子组件的html元素?

柯升
2023-03-14

嗨!

类似于:

var C1 = React.createClass({
  render: function () {
    return (
        <Circle background="deeppink" onClick={renderC2}/>
     );
  }
});

function renderC1 () {
  React.render(
    <C1 />, 
    document.getElementById('mount-point'));
}

var C2 = React.createClass({
  render: function () {
    return (
        <Circle background="salmon" onClick={renderC1}/>
     );
  }
});

function renderC2 () {
      React.render(
    <C2 />, 
    document.getElementById('mount-point'));
}

var Circle = React.createClass({
  styler: {
    width: "100px",
    height: "100px",
    mozBorderRadius: "50%",
    webkitBorderRadius: "50%",
    borderRadius: "50%",
    background: 'hotpink'
  },

  componentWillMount: function() {
    if (this.props && this.props.background &&
       this.props.background !== this.styler.background) {
         this.styler.background = this.props.background;
    }
  },

  render: function() {
    return (
      {/* tried adding key, ref and id, but does not reuse element */}
      <div onClick={this.props.onClick} style={this.styler}></div>
    );
  }
});

renderC1();

共有1个答案

孔波
2023-03-14

这是不可能的。DOM不允许一个元素同时位于两个位置。尝试将DOM元素放在新位置会自动将其从旧位置移除。

你可以在这里看到。(或者更直观地说,这里)

var parent1 = document.createElement('div'),
    parent2 = document.createElement('div'),
    child = document.createElement('div'),
    results = document.createElement('span');

  document.body.appendChild(results);
        
  parent1.appendChild(child);
  results.textContent += child.parentNode === parent1; //true
  parent2.appendChild(child);
  results.textContent += ', ' + (child.parentNode === parent1); //false
 类似资料:
  • 在呈现组件时,我得到以下警告: 我想我的组件应该完全像托管输入字段那样工作,没有任何问题: 是初始值 回调更新中的道具 使用新道具呈现组件

  • 问题内容: 我在Java 6的String源代码中注意到,hashCode仅缓存除0以外的值。以下代码段显示了性能差异: 在ideone.com中运行此命令可获得以下输出: 所以我的问题是: 为什么String的hashCode()不缓存0? Java字符串哈希为0的概率是多少? 避免对于每次哈希值都为0的字符串每次都重新计算哈希值的性能损失的最佳方法是什么? 这是缓存值的最佳实践方法吗?(即除了

  • 为什么在下面的伪代码示例中,当容器更改foo.bar时,Child没有重新呈现? 即使我在修改容器中的值后调用,Child仍然显示旧值。

  • 问题内容: 渲染组件时收到以下警告: 警告:组件 由React 组成,包含。现在,您有责任保证所有这些节点均不会意外修改或重复。这可能不是故意的。 这是我的组件: React想要警告我的代码潜在的问题是什么?通过阅读https://reactjs.org/docs/dom- elements.html上 的文档,我不太了解。 我以为我的组件应该完全像托管输入字段一样工作,没有任何问题: 是初始值

  • 问题内容: 我的React组件有问题。我组件的嵌套子代似乎没有渲染。这是我的代码: 我在此文件的顶部有以下两行: 这是我的组件: 我努力了: 以完整的HTML标记调用组件(打开和关闭) 将组件嵌套在组件中(在index.jsx文件中) 我知道嵌套组件是可能的。我已经看到了。由于某种原因,它对我不起作用。 问题答案: 要允许组件包含子项并正确渲染它们,必须使用。这是传递到所有组件与孩子为道具,包含组

  • 这是我的服务人员: 它是标准的脱机缓存服务工作程序:https://googlechrome.github.io/samples/service-worker/custom-offline-page/ 控制台中没有错误。 在Android Chrome上,将页面添加到主页效果很好(我有一个定义图标和URL的清单)。但是,当我关闭手机连接时,会收到一条错误消息: 我该如何解决这个问题?