如何在 Reactjs 中从另一个组件触发状态

Posted

技术标签:

【中文标题】如何在 Reactjs 中从另一个组件触发状态【英文标题】:How to trigger a state from another component In Reactjs 【发布时间】:2021-03-30 18:56:36 【问题描述】:

你好,我需要帮助。

我有一个进度条组件和一个在其中使用进度条的组件。 以及另一个应该触发进度条的组件。

APP结构示例

主页.js 具有进度条的组件(组件 1) 介于两者之间的组件(组件 2) 我想从中触发进度条的组件(组件 3) ProgressBar 组件(ProgressBar)

https://codesandbox.io/s/optimistic-stallman-rjxi9?file=/src/App.js

这是我想要实现的目标以及我的想象的一个例子。代码不起作用,但你会从代码的结构中得到想法。

我想从 Component 3 执行 onClick 来更改位于 Component 1 中的进度条状态,但中间有一个 Component 以及自己的组件上的进度条。

我尝试将函数正常传递给组件中的新函数,我想从(组件 3)触发该操作并将该函数传递给按钮。但它得到一个错误“类型错误 this.props.* 不是函数”

提前谢谢你

【问题讨论】:

听起来您走在正确的轨道上(将回调函数向下传递到组件树) - 您能否更新您的示例以包含您遇到“类型错误 this.props. * 不是函数”?这听起来像是正确的方法,但在传递或调用函数时某处出现错误。 是的,我已经说过这不是原始代码,现在分享起来很复杂,我不允许分享,但我做了一个简化版本只是想触发进度条。在原始代码中出现错误 【参考方案1】:

您需要使 Component2 (C2) 和 Component3 (C3) 成为 Component1 的子代,并将 handleProgress 作为道具传递给 Component2 和 Component3,就像这里的 https://codesandbox.io/s/blue-lake-6mx7o?fontsize=14&hidenavigation=1&theme=dark

目前,您在 C1 中创建了一个函数 handleProgress,但从未将它传递给 C2 和 C3。

要将其传递给 C2 和 C3,您需要将它们从 App 组件中移除,并将它们移动到 C1。

【讨论】:

谢谢,但我没有t get your answer, I assume they are children of Component 1 if you looked into the App.js? Isnt 那你的意思是什么? 我看到你的解决方案很有意义,但在我的情况下,如果我不能从 App.js 中删除它们怎么办 然后你需要将状态提升到App并将进度存储在App中。在 React 中,通信是上下进行的,而不是组件之间的水平通信(这是可能的,但它很难看,而且有代码味道) 我同意你的观点,但我现在没有选择该项目已经存在,需要时间来改变很多事情,你能告诉我丑陋的方式吗?我会很感激那谢谢 您要求修复不起作用的代码,我做到了。你问的是一个不同的问题。请创建一个新问题,Stack Overflow 的集体思想将为您提供帮助:)

以上是关于如何在 Reactjs 中从另一个组件触发状态的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS中从父组件调用子函数时如何在子组件中设置状态

如何在 Nuxt 中从另一个访问一个 Vuex 状态?

如何在 ReactJS 中从“外部”访问组件方法?

如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件

如何在reactjs中访问悬停状态?

如何在 Material-UI、ReactJS 中从分页中设置分页项的样式?