我需要在应用程序范围内全局访问VideoElement,以便在Safari等浏览器上的用户事件中播放它,我想知道将VideoElement存储在上下文中是否是最好的方法。我通过redux操作以编程方式播放我的视频,在Safari中,除非通过用户触发的事件(如单击)播放过一次,否则这是不可能的。
是否可以将元素(ref)存储在上下文中?VideoElement将在我希望拥有视频的组件中呈现,然后其他组件也可以访问上下文,并能够基于上下文的状态调用usePlayVideo
等函数,videoElement.play如果是第一次播放视频,则调用www.example.com(),或者分派redux动作以另外编程地播放视频
5条答案
按热度按时间mrphzbgm1#
可以将ref存储到context中!首先需要创建一个context,然后将value传递给context提供者,使用useRef钩子创建一个ref对象,然后将ref传递给value。
现在,您有了一个在上下文提供者下的组件之间共享的ref对象,如果您想检索或传递一个新的ref,您可以使用useContext钩子来处理它。
下面是demo(代码和框)。
下面是示例代码。
gg58donl2#
您可以使用以下方法:
VideoContext.js
和
App.js
,例如:code sandbox
3zwtqj6y3#
为什么不呢?我也这么觉得。看看能不能树立一个榜样。
上述两个孩子不必共享同一祖先。
我没有用你想要的方式引用,但我认为你可以把你的引用传递给其中一个函数。这是一个非常基本的想法。我还没有测试它。但似乎它可以工作。一点点
vmdwslir4#
我使用了以下方法:
首先创建了上下文和ContextProvider;
然后在我的index.js中添加我的提供程序:
在那之后,我在我需要的地方使用了我的上下文:
在我的例子中,我想滚动到上面的组件,单击另一个组件中的按钮:
4szc88ey5#
不可以。不能在上下文API上使用Ref。React ref被认为是在呈现元素上使用的。
您要寻找的是forward the ref,这样您就可以在任何需要的地方执行consume them。