【发布时间】:2019-02-28 22:53:08
【问题描述】:
我有一个简单的 React 应用,它带有视频播放器和显示视频数据的图表。两者都在自己的顶层组件中:
class App extends Component {
...
render() {
return (
<div className="App">
<VideoDisplay .../>
<MetricsDisplay .../>
</div>
)
}
}
在VideoDisplay.js 内部是一个我想要控制的<video> 元素,特别是通过寻找它的播放位置,我可以使用videoElement.currentTime=seekToTime 来做到这一点。我想通过MetricsDisplay 元素来控制它:如果我点击图表,我希望视频搜索到点击的时间。但要做到这一点,当它收到来自MetricsDisplay.js 的点击时,似乎我必须从App.js 调用VideoDisplay.js 中的一个函数。但这是必要的,而不是声明性的,而且确实我在 React 中实现它时遇到了麻烦。甚至可能吗?我怎么能告诉一个元素中的视频,由同级元素的点击触发?
我有一个解决方法,我将发布作为答案,但我非常确信从设计的角度来看它不是最佳的,并且会导致代码维护问题。那么有什么更好的方法呢?做这种事情的“反应”方式是什么?
见附件截图:点击右图时,视频应该会搜索到点击的时间点。
【问题讨论】:
标签: reactjs imperative-programming declarative-programming