此问题在此处已有答案:
React Native Android Fetch failing on connection to local API(16个回答)
3天前关闭。
在iOS上一切正常,但在Android上无法连接
import { useState, useEffect } from 'react'
import { io } from 'socket.io-client'
const URL = 'http://localhost:8001'
const socket = io(URL)
const useSocket = () => {
const [isConnected, setIsConnected] = useState(socket.connected)
useEffect(() => {
const onConnect = () => setIsConnected(true)
const onDisconnect = () => setIsConnected(false)
if (!socket.connected) {
socket.connect()
}
socket.on('connect', onConnect)
socket.on('disconnect', onDisconnect)
return () => {
socket.off('connect', onConnect)
socket.off('disconnect', onDisconnect)
}
}, [])
return { socket, isConnected }
}
export default useSocket
字符串
最新消息:
如果我换一个
第一个月
与const URL = 'http://192.168.1.91:8001'
个
也就是我在网络上的本地IP
我将不讨论这个问题,因为能够仅使用localhost
或127.0.0.1
而不是特定IP将非常有用
1条答案
按热度按时间x4shl7ld1#
虽然这是一种不同类型的请求,但其背后的解决方案和推理与此问题相同:React Native Android Fetch failing on connection to local API
它在iOS sim上工作,因为作为模拟器,它与主机共享其网络配置。另一方面,Android模拟器是一个独立的设备,具有自己的本地IP,因此
localhost
告诉您的应用搜索Android的内部网络。使用主机的完整本地IP地址的解决方案是解决此问题的最简单方法。
出于开发目的,您还可以在构建时使用shell脚本将主机的IP存储在环境变量中。然后你可以使用像
react-native-config
这样的工具来读取应用中的变量。如果你想知道更多的信息,让我知道。