【发布时间】:2014-05-14 23:29:23
【问题描述】:
我目前正在试用 reactjs,试图用它制作一个基于 MVC 的纸牌游戏。我发现 ReactJS 是一个功能强大且性能良好的视图库,但我在将其映射到更传统的 MVC 模式(其中视图侦听模型)时遇到了一些麻烦。
在纸牌游戏中,我桌上有 2 排纸牌,一张是当前玩家,一张是对手玩家。当前玩家的牌在底行,可以选择。在我的 GameView 中,我渲染了 2 个子视图,如下所示:
<SlotView key="slotview1" slot={this.state.otherPlayer.slot} selectable={false} />
<SlotView key="slotview2" slot={this.state.currentPlayer.slot} selectable={this.state.playing_cards} on_select={this.handlePlayCard}>
当回合结束时,我交换当前玩家和其他玩家(在游戏模型中)并通过事件通知游戏视图。游戏视图的状态被更新,然后它从其他玩家的角度重新呈现自己。
这很好用,其他玩家的牌显示在底行。但是,我遇到的问题是 SlotView (游戏视图的子视图)也监听它的模型(它在玩牌时自我更新)。
我在 SlotView#ComponentDidMount 中绑定监听器并在 SlotView#ComponentDidUnmount 中取消绑定它们。但是,该组件仅在第一次渲染期间安装,并且永远不会卸载并再次安装。它的属性(插槽)正在更新到另一个玩家,但它仍然监听来自第一个玩家的事件。有没有办法可以监听绑定/取消绑定事件处理程序的属性更改?或者我应该根本不听子组件中的模型,而是用更面向推送的模型替换 MVC 模型(但这似乎会产生很多带有嵌套视图的样板代码)? 我应该在渲染方法本身中取消绑定/重新绑定吗(但这似乎也有问题)?
很想知道其他人是如何做到这一点的......
【问题讨论】:
标签: reactjs