Javascript 将数据传递给同级组件

Javascript 将数据传递给同级组件,javascript,reactjs,Javascript,Reactjs,我想知道如何将道具传递到兄弟组件中,如给定图像中所示。我无法用语言解释它,因为它似乎太难理解(至少对我来说) 我有一个应用程序(类组件),其中包含给定的状态变量。我使用状态生成一个对象,该对象包含日历等信息(日期、周、年)。按钮外观由该脚本生成 时间表组件采用一些道具(根据按下的按钮),这些道具用于从Firestore数据库收集数据 我知道React有一个从上到下的单向数据流,这就是为什么我不能弄清楚这一点。如果可能的话,我不想使用Redux 问题1:我如何告诉时刻表组件按下了哪个按钮以及它包

我想知道如何将道具传递到兄弟组件中,如给定图像中所示。我无法用语言解释它,因为它似乎太难理解(至少对我来说)

我有一个应用程序(类组件),其中包含给定的状态变量。我使用状态生成一个对象,该对象包含日历等信息(日期、周、年)。按钮外观由该脚本生成

时间表组件采用一些道具(根据按下的按钮),这些道具用于从Firestore数据库收集数据

我知道React有一个从上到下的单向数据流,这就是为什么我不能弄清楚这一点。如果可能的话,我不想使用Redux

问题1:我如何告诉时刻表组件按下了哪个按钮以及它包含的日期

问题2:在这些情况下,我真的需要使用Redux吗

*编辑


如果要在封装在公共父级中的同级组件之间交换道具,可以将源组件状态转换为公共父级的状态,然后将其传递给另一个(接收器)组件

如果您需要全局访问源组件的状态(例如,分布在应用程序中的多个非相邻组件),您可能需要使用或某些状态管理工具,如

第一种方法的现场演示(最简单)如下所示:

const{useState}=React,
{render}=ReactDOM,
rootNode=document.getElementById('root'))
常量源=({onButtonClick})=>(
打我
)
常量接收器=({status})=>(
{状态}
)
常量父项=()=>{
常量[buttonStatus,setButtonStatus]=useState('off'),
把手按钮点击=()=>
setButtonStatus(按钮状态==“关闭”?“打开”:“关闭”)
返回(
)
}
渲染(
,
根节点
)

如果要在封装在公共父级中的同级组件之间交换道具,可以将组件状态源化到公共父级的状态,然后将其传递给另一个(接收器)组件

如果您需要全局访问源组件的状态(例如,分布在应用程序中的多个非相邻组件),您可能需要使用或某些状态管理工具,如

第一种方法的现场演示(最简单)如下所示:

const{useState}=React,
{render}=ReactDOM,
rootNode=document.getElementById('root'))
常量源=({onButtonClick})=>(
打我
)
常量接收器=({status})=>(
{状态}
)
常量父项=()=>{
常量[buttonStatus,setButtonStatus]=useState('off'),
把手按钮点击=()=>
setButtonStatus(按钮状态==“关闭”?“打开”:“关闭”)
返回(
)
}
渲染(
,
根节点
)

如果不想使用redux,您可以使用
上下文
。您只能向下传递道具,您的选项是,状态管理(redux)或反应上下文。如果状态太多,则使用取决于您的使用redux@Bogdan-DanielMihalcea没有比这更好的了,如果您的需求非常复杂,需要大量的逻辑,那么redux是一种方法,因为它更容易维护和调试复杂的需求。最初编写上下文更容易,但如果需求变得更复杂,则更难管理上下文(需要获取数据和更新数据的组件更多,这些组件在何时更新以及如何获取数据方面都有不同的规则)@Bogdan DanielMihalcea自学redux可能很困难,需要一段时间才能理解如何使用它以及为什么要使用它。如果您知道什么是CQR(事件源),那么您就会知道redux模式的优势。中间件和reducer是命令,选择器是查询(我建议使用reselect)。事件源是redux开发工具,您可以在其中概述发生了什么(操作)以及它们做出了什么更改(状态)。您甚至可以重播操作(如果有时间或订单特定的副作用,则可以中断)。如果不想使用redux,则可以使用
context
。您只能向下传递道具,您的选项是,状态管理(redux)或react context。如果状态太多,则使用取决于您的使用redux@Bogdan-DanielMihalcea没有比这更好的了,如果您的需求非常复杂,需要大量的逻辑,那么redux是一种方法,因为它更容易维护和调试复杂的需求。最初编写上下文更容易,但如果需求变得更复杂,则更难管理上下文(需要获取数据和更新数据的组件更多,这些组件在何时更新以及如何获取数据方面都有不同的规则)@Bogdan DanielMihalcea自学redux可能很困难,需要一段时间才能理解如何使用它以及为什么要使用它。如果您知道什么是CQR(事件源),那么您就会知道redux模式的优势。中间件和reducer是命令,选择器是查询(我建议使用reselect)。事件源是redux开发工具,您可以在其中概述发生了什么(操作)以及它们做出了什么更改(状态)。您甚至可以重播这些操作(如果有时间或订单特定的副作用,则可以中断)