更好的方法可以在反应本质中的组件之间共享变量



我正在使用react-native and socket.io创建一个应用程序。一旦使用 io.connect(...)连接了socket.io,我需要保存一个可以在任何组件中使用的插座客户端的变量。

但是问题是:

1-我正在使用React -Navigation,因此我无法从组件中作为属性传递,因为该连接不是在Navigator root中进行的,它是在Child Scree内部制作的

2-我不能使用this.props.navigation.navigate(route, {socketIo})作为导航参数传递,因为它是一个圆形对象,而JSON.STRINGIFY INSIEND REACT -NAVIGATION模块试图处理数据

3-我无法制作模块并将其导入其他文件,一旦它生成多个连接

解决我问题的解决方法是设置这样的全局变量:

global.socket = io.connect(...)

但是,在谷歌搜索时,我发现很多人说这不是一个好方法。有什么方法可以解决这个问题?

这是一种特殊情况,可以在React Native应用程序上共享变量和方法,因为您需要与私人方法共享A socket 连接以发射和接收事件,并且不仅共享变量。

在这种情况下,Redux还不够。我可以通过使用新的stacknavigator创建导航器容器来解决,并在此容器中处理 socket 连接和事件,并通过redux管理操作。例如:如果您需要在某些屏幕中派遣事件,则可以使用Redux派遣并在socketContainer中侦听,然后执行IO操作。

此外,我创建了一个polyfill,因为React Native中的套接字实现具有用户误差。您可以在本文中阅读更多信息。

可以在此处找到我实施的完整示例。

这看起来像是redux的用例。Redux允许您在所有组件中共享数据。

最新更新