【问题标题】:How to bubble up an event to the very top parent React style?如何将事件冒泡到最顶级的父级 React 样式?
【发布时间】:2015-11-26 10:39:58
【问题描述】:

我有一组组件app->page->list_container->list->item 我的目标是通知app 点击发生在item 级别。 如果有像parent->child 这样的简单关系,我可以使用道具并执行以下操作:<Child onClick={this._onClick}> ...,然后使用this.props.onClick() 进行回调。
但是,对于使用组件树执行相同的技巧,最好的原生 React 风格的收据是什么?如何通知appitem 被点击而不调用 Flux/Reflux、Elm 和其他支持的库?

【问题讨论】:

    标签: javascript reactjs react-native


    【解决方案1】:

    标准反应方式:
    onClick 函数作为组件树的支柱传递是标准的反应方式。

    <app>:

    <page onClick={this._onClick}>
    

    &lt;page&gt;:

    <list_container onClick={this.props.onClick}>
    

    等等。

    或者你可以使用:

    <list_container {...this.props}>
    

    自动将任何 prop 从父组件传递到子组件。

    在深树中,这可以而且将会变得非常乏味/大量的工作。 React 不是为此目的而设计的。
    React 是为(自上而下)智能和快速的组件树渲染而设计的。
    您提到的通量模式框架旨在处理其他交互功能。

    替代快捷方式(不推荐): 您可以使用的一种快捷方式是直接在 DOM 上添加一个侦听器,在您的 &lt;app&gt; 组件内,它处理项目上的点击事件:

    &lt;app&gt;组件中,添加:

    componentDidMount: function() {
      var itemElementInDOM = document.getElementById('myItem');
      itemElementInDOM.addEventListener('click',this._onClick);
    }
    

    在您的 &lt;item&gt; 组件中,为项目指定一个(唯一的)ID。

    我一般不会推荐这个:

    • 在典型的反应树设置中,较低级别的组件(如 &lt;item&gt;) 可能会多次渲染,然后你需要 附加逻辑以确保每个 ID 都是唯一的。
    • 你也会 需要添加一些额外的智能以确保您删除侦听器 相关项目已从 DOM 中移除。

    【讨论】:

    • 谢谢。但不知何故,我确信将事件或状态冒泡到根组件是一项常见任务。对我来说真的很奇怪,它有一个如此乏味的解决方案。也许我构建代码的方式有问题?有什么常见的 React 方法可以做到吗?
    • 常见的仅反应方式正在冒泡。但是 React 不喜欢冒泡(也称为反模式)。将父子通信与子父通信混合使代码更难调试。这就是为什么通量——单向数据流——经常与反应齐头并进。
    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2010-12-07
    • 2015-09-30
    • 2019-11-21
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多