我正在学习在我的反应应用程序中实现 Unstated。
我制作了一个简单的应用程序,它使用 Unstated 显示注释。
这是我的 NoteContainer:
class NoteContainer extends Container {
state = {
title: 'My Note',
desc: 'This note state is managed with unstated',
isDisplaying: false,
}
constructor() {
super()
this.show = this.show.bind(this);
}
show() {
this.setState({ isDisplaying: !this.state.isDisplaying })
console.log(this.state);
}
}
如您所见,这非常简单,它只是更改状态中的 isDisplaying 属性,以便我可以在 Note.js 组件上使用它来显示注释的标题和消息,如下所示:
class Note extends Component {
state = {
isShowing: false,
}
render() {
if (this.state.isShowing) {
return (
<Subscribe to={[NoteContainer]}>
{noteContainer => (
<div className="container">
<p>{noteContainer.state.title}</p>
<p>{noteContainer.state.desc}</p>
</div>
)}
</Subscribe>
)
}
return (
<Subscribe to={[NoteContainer]}>
{noteContainer => (
<div className="container">
<button className="btn btn-success" onClick={() => {
noteContainer.show();
this.setState({
isShowing: noteContainer.state.isDisplaying,
})
console.log(this.state);
}}>
See Note!
</button>
</div>
)}
</Subscribe>
)
}
}
所需的功能是,当我单击查看注释时!按钮,它显示按钮上方注释的标题和描述,如果我再次单击它,它会隐藏它们。
但是,我得到的是它创建了另一个订阅组件,这似乎删除了“见注!” 按钮部分。这是结果的图像。
问题是我不能再次使用按钮来隐藏注释信息,我显然使用了错误的订阅组件,但我想不出另一种方法来使用未声明的条件,所以对此的任何帮助将不胜感激。
在此先感谢,祝您度过愉快的一周!