我有一个简单的Preact组件,其中包含一个复选框:
class Cb extends Component {
render() {
return (<div>Checkbox: <input type="checkbox" /></div>);
}
}
在父级Component
中,此Cb
的添加条件如下:
{ this.state.show ? <Cb /> : <div>Nothing</div> }
现在介绍奇怪的部分:如果您按照以下步骤操作:
state.show
中切换Component
,删除Cb
state.show
中切换Component
,创建新的Cb
然后仍选中新创建的复选框!
这怎么可能?确实删除了该复选框,并创建了一个全新的Cb
实例(我在构造函数中使用日志消息进行了检查)。此状态存储在哪里?
其他怪异: React的行为不同(在那里,未选中新创建的复选框)。
答案 0 :(得分:1)
这与Preact如何回收组件有关。 GitHub issue与您的问题是一样的。现在要解决此问题,您将需要重置componentWillUnmount
componentWillUnmount () {
this.cb.checked = false;
}
this.cb
是对复选框的引用。
使用Codepen进行修改。
我将复选框设为ref,因为componentWillUnMount并使用querySelector(以及它的输入也较短)还有另一个问题
编辑:如前所述,这仅对preact 8.x有效。 preact X消除了组件回收。