全局事件和组件的本地状态

时间:2016-09-12 19:03:08

标签: reactjs clojurescript om-next

所以我有一个组件,让我们说当我点击它时,这应该触发状态改变,例如:

: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个事件监听器,对吧? 这是不可取的但是好的,我想

真正的问题是,在设置状态时,如何区分组件的一个实例?我绝对不希望所有这些都被“停用”,而只是要触发点击事件处理程序的上下文

1 个答案:

答案 0 :(得分:1)

我认为问题的标题指出了真正的问题:影响当地国家的全球事件。听起来像“被激活”的概念不属于这些组件中的每一个(作为本地状态),而是属于树中更高的东西。否则,它们将独立运作。但听起来我觉得你希望一次激活其中一个,对吗?

我会在父级的本地状态或全局应用程序状态中识别当前活动的状态。然后我会让每个孩子的父手在点击它以激活它时可以调用它。最后,父元素可以在其元素上有一个单击事件侦听器,可能是一个覆盖整个页面的元素,它会激活活动子节点(通过将活动子节点设置为nil,无论它存储在何处)。