【问题标题】:How can I "touch" one component from another without nesting?如何在不嵌套的情况下“触摸”另一个组件?
【发布时间】:2018-01-10 10:59:37
【问题描述】:

给定这个组件树:

c0 - c11 - c12 - c13
   \
     c21 - c22

将一些数据从 c13 发送到 c22 的最佳方式是什么?

在我的情况下,我有类似论坛页面(c0)的东西:有消息提要(c11),消息(c12),“引用”按钮(c13)和一些控件(c21)阻止,包括消息表单(c22) .

我想要的是在单击报价单时向消息表单添加一些文本。 因此,我将回调(通过道具)onQuote 添加到刚刚使用消息文本(带有一些转换)调用的消息,如下所示:this.props.onQuote(txt)。然后我通过在链中传递它从根组件(c0)提供它:c0 - c11 - c12。由于消息形式的文本保持在 c22 状态,我必须创建类似 .setText(txt) 的方法并从 c21 创建委托以从 c0 调用它。

对我来说,这看起来很糟糕(实际上是另一个词)而且很复杂(代码太多)。

我怎样才能做得更好?我不想使用全局状态,我不相信这是做事的反应方式。我真的不喜欢整个“传递”的东西,因为中间有很多组件对数据不做任何事情,只是传递它。

【问题讨论】:

    标签: reactjs components


    【解决方案1】:

    Facebook 本身首选和建议的方法是将状态提升到至少两个组件最近的共同祖先。

    【讨论】:

    • 好吧,我不喜欢这种情况下的“提升状态”解决方案,因为它在容器中的耦合过多。为什么我要将输入的文本保留在某个容器中并通过 3 个组件传递,而不是仅将其保留在 MessageForm 组件中?
    • 因为这就是 React 的作者打算工作的方式 - reactjs.org/docs/lifting-state-up.html - 所以或者你非常熟练,或者你可能是在浪费时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2013-06-02
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多