所以我有一个组件,让我们说当我点击它时,这应该触发状态改变,例如:
:on-click #(om/set-state! this {:activated? true})
现在,如果我想在文档的任何位置单击“停用”它,该怎么办?我想我可以通过将addEventListener
挂钩到document
对象上来使用(componentDidMount [this]
(events/listen (gdom/getDocument)
(.-CLICK events/EventType)
#(om/set-state! this {:activated? false}) true))
,如下所示:
int i=0;
while(isDigit(str.charAt(i))) {
str.deleteCharAt(i);
}
现在这样做我想要的,但首先如果我有200个相同组件的实例,它将有200个事件监听器,对吧? 这是不可取的但是好的,我想
真正的问题是,在设置状态时,如何区分组件的一个实例?我绝对不希望所有这些都被“停用”,而只是要触发点击事件处理程序的上下文
答案 0 :(得分:1)
我认为问题的标题指出了真正的问题:影响当地国家的全球事件。听起来像“被激活”的概念不属于这些组件中的每一个(作为本地状态),而是属于树中更高的东西。否则,它们将独立运作。但听起来我觉得你希望一次激活其中一个,对吗?
我会在父级的本地状态或全局应用程序状态中识别当前活动的状态。然后我会让每个孩子的父手在点击它以激活它时可以调用它。最后,父元素可以在其元素上有一个单击事件侦听器,可能是一个覆盖整个页面的元素,它会激活活动子节点(通过将活动子节点设置为nil
,无论它存储在何处)。