Javascript 从其他组件调度操作时触发函数

Javascript 从其他组件调度操作时触发函数,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我正在开发一个reactjs应用程序并使用redux。我有两个部分。说出成分A和成分B。在组件A中,我有一个表。当我单击任何一行时,我将显示一个操作,该操作的参数为行的数据。每次单击一行时,都会调度此操作。每当单击一行并调度该操作时,我想在组件B中触发一个函数。我怎么做 通常,我们通过动作分派来更改reducer中的数据,然后将该数据用作其他组件中的状态。但在这里,每当在组件a的表中单击一行时,我想在组件B中触发一个函数。单击时在a行中调度一个操作,该操作将布尔值设置为true。然后使用MapS

我正在开发一个reactjs应用程序并使用redux。我有两个部分。说出成分A成分B。在组件A中,我有一个表。当我单击任何一行时,我将显示一个操作,该操作的参数为行的数据。每次单击一行时,都会调度此操作。每当单击一行并调度该操作时,我想在组件B中触发一个函数。我怎么做


通常,我们通过动作分派来更改reducer中的数据,然后将该数据用作其他组件中的状态。但在这里,每当在组件a的表中单击一行时,我想在组件B中触发一个函数。

单击时在a行中调度一个操作,该操作将布尔值设置为true。然后使用
MapStateTops
在Redux状态更改时重新渲染组件。然后在
componentDidUpdate()中对所需函数进行条件调用:


如果您需要进一步澄清,请发表评论。

您可以通过以下几种方式实现此目的

i) 如果存在父子关系,只需传递
activeRow
函数作为子组件的
props

类组件A扩展了React.component{
render(){
返回(
{/*视图,可以是表、节、div等。*/}
点击我
)
}
}
类ComponentB扩展了React.component{
handleClick(){
//做点什么。
log(“单击!”);
}
render(){
返回(
{/*视图,可以是表、节、div等。*/}
)
}

}
组件B是组件A的父级吗?否。它们是分开的。是的。但是您可以传递任何值,正如我在commentSo中提到的,所以每次都会执行functionToBeCalled(),即使标志值从“true”更改为“true”。我的意思是每次单击该行时,都会执行functionToBeCalled()?不,因为您必须传递任何其他值,这些值每次都会更改。我确定您希望传递有关单击了哪一行的一些信息。请看这就是问题所在。如果减速器发生变化,我该如何检查?假设行id更改。现在该怎么办呢?我的组件B是视频播放器。因此,当我玩播放器时,componentUpdate将无限运行。有解决方案吗?但是this.state.activeRow.id和props.activeRow.id都是相同的。对吗?必须使用this.state.activeRow.id=props.activeRow.id才能维护this.state.activeRow.id。那么,在任何时候,它们怎么会不相等呢?那么我们就不明白你的逻辑:(如果行ID没有更改,为什么要更新?行ID正在更改。但是一旦行ID更改,this.state.activeRow.ID也会更改,对吗?因为我们必须执行setState({this.state.activeRow.ID:props.activeRow.ID})看起来不错。但是请使用
props
键进行深入检查,而不仅仅是
nextrops===this。props
这是一个示例,您可以做您想做的事情
class B extends React.Component {
  componentDidUpdate() {
    const { rowClickedInAComponent } = this.props;
    if ( rowClickedInAComponent ) {
      functionToBeCalled();
    }
  }
  render() {
  }
}

const mapStateToProps = (state) => ({
  rowClickedInAComponent: rowClickedInAComponent
  // boolean here, you could pass any info such as which row was clicked
});

export default connect(mapStateToProps)(ListingPage);