Javascript 嵌套组件是否可以改变反应上下文?

Javascript 嵌套组件是否可以改变反应上下文?,javascript,reactjs,redux,react-context,Javascript,Reactjs,Redux,React Context,我有两个组件位于组件树中的不同位置。由于布局原因,它们不能嵌套,但我需要它们进行通信 我试过对上下文作出反应,但据我所知,消费者需要是提供者的孩子,这违背了目的 有没有一种方法可以包含三个组件:一个总体提供者、一个将改变提供者状态的组件和一个使用者 有助于澄清的伪代码: <PROVIDER /> <SOURCE OF DATA /> <CONSUMER /> <PROVIDER /> 否。在React中,数据始终自上而下流向树的其余部

我有两个组件位于组件树中的不同位置。由于布局原因,它们不能嵌套,但我需要它们进行通信

我试过对上下文作出反应,但据我所知,消费者需要是提供者的孩子,这违背了目的

有没有一种方法可以包含三个组件:一个总体提供者、一个将改变提供者状态的组件和一个使用者

有助于澄清的伪代码:

<PROVIDER />
   <SOURCE OF DATA />
   <CONSUMER />
<PROVIDER />

否。在React中,数据始终自上而下流向树的其余部分。上下文特别是一种机制,用于将值提供给给定的组件子树。上下文实例的值通常保持在React组件状态,在呈现
的同一组件中。所以,国家也必须做到最好


如果您真的需要使用广泛分离的组件与相同的数据进行交互,那么是时候开始研究Redux或其他外部状态管理工具了。

是的,在React中,数据总是沿着树向下流动

这种状态管理问题非常普遍;许多库(例如Redux、Mobx)都是为解决这些问题而设计的,我建议您研究一下它们

但是,如果您真的无法区分这两个组件,并且如果您现在不想学习/包括状态管理库,那么您可以使用上下文来线程化数据;诀窍是将回调函数与正在上下文中线程化的数据一起传递

组件收集新数据时,它可以用新数据调用此回调;然后,此回调函数(在提供程序组件中定义)将更新提供程序的状态,这将导致使用新数据值对所有子组件进行整体刷新。(下面我(非常)粗略地说明了这一点;语法将根据您是否使用挂钩而有所不同。)

提供程序组件:
状态=数据
回调=(newData)=>updateState(数据
PROVIDER COMPONENT:
   state = data
   callback = (newData) => updateState(data <= newData)              
   return(
       <MyContext.Provide { data, callback } >     // provides { data, callback }
           <SOURCE OF DATA />   // consumes callback from context and invokes callback(newData)
           <CONSUMER />         // consumes data/newData from context
       </MyContext.Provider>
   );