React native 在react native中的组件之间共享变量的更好方法

React native 在react native中的组件之间共享变量的更好方法,react-native,react-navigation,React Native,React Navigation,我正在使用react native和socket.io创建一个应用程序。使用io.connect(…)连接socket.io后,我需要使用socket客户端保存一个变量,该变量可以在任何组件中使用 但问题是: 1-我使用的是react navigation,因此无法作为组件的属性传递,因为连接不是在navigator根目录中建立的,而是在子屏幕中建立的 2-我无法使用this.props.navigation.navigate(route,{socketIo})作为导航参数传递,因为它是一个循环

我正在使用react native和socket.io创建一个应用程序。使用
io.connect(…)
连接socket.io后,我需要使用socket客户端保存一个变量,该变量可以在任何组件中使用

但问题是:

1-我使用的是react navigation,因此无法作为组件的属性传递,因为连接不是在navigator根目录中建立的,而是在子屏幕中建立的

2-我无法使用
this.props.navigation.navigate(route,{socketIo})
作为导航参数传递,因为它是一个循环对象,并且JSON.stringify Inner react导航模块在尝试处理数据时抛出一个错误

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

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

global.socket=io.connect(…)


但在谷歌搜索时,我发现很多人说这不是一个好方法。有没有更好的办法来解决这个问题

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

跨react本机应用程序共享变量和方法是一种特殊情况,因为您需要与私有方法共享套接字连接以发出和接收事件,而不仅仅是共享变量

在这种情况下,Redux是不够的。我通过使用一个新的处理程序创建一个navigator容器来解决这个问题,处理容器中的套接字连接和事件,并通过Redux管理操作。例如:如果您需要在某个屏幕中分派事件,您可以使用Redux分派该事件并侦听,然后执行IO操作

此外,我创建了一个Polyfill,因为React Native中的套接字实现有错误。您可以在中阅读更多关于


我的实现的完整示例可以是。

谢谢您的回答。使用组件是一个好主意,对我来说效果很好