新创建的preact Component保留旧组件的UI状态(与react不同)

时间:2018-11-10 21:12:09

标签: reactjs preact

我有一个简单的Preact组件,其中包含一个复选框:

class Cb extends Component {
  render() {
    return (<div>Checkbox: <input type="checkbox" /></div>);
  }
}

在父级Component中,此Cb的添加条件如下:

{ this.state.show ? <Cb /> : <div>Nothing</div> }

现在介绍奇怪的部分:如果您按照以下步骤操作:

  1. 选中复选框
  2. 在父项state.show中切换Component,删除Cb
  3. 再次在父级state.show中切换Component,创建新的Cb

然后仍选中新创建的复选框! 这怎么可能?确实删除了该复选框,并创建了一个全新的Cb实例(我在构造函数中使用日志消息进行了检查)。此状态存储在哪里?

其他怪异: React的行为不同(在那里,未选中新创建的复选框)。

这里有两个PreactReact中具有相同代码的Codepen,您可以在其中比较行为。

1 个答案:

答案 0 :(得分:1)

这与Preact如何回收组件有关。 GitHub issue与您的问题是一样的。现在要解决此问题,您将需要重置componentWillUnmount

中的检查值
  componentWillUnmount () {
    this.cb.checked = false;
  }

this.cb是对复选框的引用。 使用Codepen进行修改。 我将复选框设为ref,因为componentWillUnMount并使用querySelector(以及它的输入也较短)还有另一个问题

编辑:如前所述,这仅对preact 8.x有效。 preact X消除了组件回收。