
Security News
Critical Security Vulnerability in React Server Components
React disclosed a CVSS 10.0 RCE in React Server Components and is advising users to upgrade affected packages and frameworks to patched versions now.
@reason-react-native/netinfo
Advanced tools
@reason-react-native/netinfoReScript / Reason bindings for
@react-native-community/netinfo.
Exposed as ReactNativeNetInfo module.
@reason-react-native/netinfo X.y.* means it's compatible with
@react-native-community/netinfo X.y.*
When
@react-native-community/netinfo
is properly installed & configured by following their installation instructions,
you can install the bindings:
npm install @reason-react-native/netinfo
# or
yarn add @reason-react-native/netinfo
@reason-react-native/netinfo should be added to bs-dependencies in your
bsconfig.json:
{
//...
"bs-dependencies": [
"reason-react",
"reason-react-native",
// ...
+ "@reason-react-native/netinfo"
],
//...
}
netInfoConfigurationTo be used only when the platform does not natively supply information on internet reachability.
| Property | Type | Description |
|---|---|---|
reachabilityUrl | string | URL used to test if the internet is reachable. |
reachabilityTest | response => bool | A function to handle the response object returned when the reachability URL is called. It should return true if the response indicates that the internet is reachable. |
reachabilityShortTimeout | float | Number of seconds between internet reachability checks when the internet was not previously detected. |
reachabilityLongTimeout | float | Number of seconds between internet reachability checks when the internet was previously detected. |
reachabilityRequestTimeout | float | Number of milliseconds allowed before reachability check fails. |
netInfoStateTypeKind of the current network connection. Valid values are:
| Value | Platforms | Connection State |
|---|---|---|
none | Android, iOS, Windows | Not active |
unknown | Android, iOS, Windows | Undetermined |
cellular | Android, iOS, Windows | Active |
wifi | Android, iOS, Windows | Active |
bluetooth | Android | Active |
ethernet | Android, Windows | Active |
wimax | Android | Active |
vpn | Android | Active |
other | Android, iOS, Windows | Active |
netInfoCellularGenerationCellular generation of the current network connection. Valid values are:
| Value | Notes |
|---|---|
net2g | Inlined as "2g". Returned for CDMA, EDGE, GPRS and IDEN connections |
net3g | Inlined as "3g". Returned for EHRPD, EVDO, HSPA, HSUPA, HSDPA and UTMS connections. |
net4g | Inlined as "4g". Returned for HSPAP and LTE connections |
netInfoStatetype netInfoState = {
.
"_type": netInfoStateType,
"isConnected": bool,
"isInternetReachable": bool,
"isWifiEnabled": bool,
"details": Js.Null.t(details),
};
isConnected will be true if there is an active connection (but not imply
that the internet is necessarily reachable).isInternetReachable will be true if the internet can be reached using the
active connectionisWifiEnabled will be true if WiFi is enabled on the device, and false
otherwise. Android only.details key will have value Js.Null.empty (null) when _type is null or
unknown.
detailsdetails depends on _type given within netInfoState. If
_type is not null or unknown, details is an object as below:
type details = {
.
"isConnectionExpensive": bool,
"ssid": Js.Nullable.t(string),
"strength": Js.Nullable.t(int),
"ipAddress": Js.Nullable.t(string),
"subnet": Js.Nullable.t(string),
"cellularGeneration": Js.Nullable.t(netInfoCellularGeneration),
"carrier": Js.Nullable.t(string),
};
| Property | Platform | Type | Description |
|---|---|---|---|
isConnectionExpensive | Android, iOS, Windows | bool | If network connection is considered expensive in either energy or monetary terms. |
Note that some keys may only exist in the JS object when _type is wifi or
cellular. Accordingly, in Reason, keys may have values
Js.Nullable.undefined.
ssid, strength, ipAddress and subnet will have value
Js.Nullable.undefined unless _type is wifi.cellularGeneration and carrier will have value Js.Nullable.undefined
unless _type is cellular._type is wifi| Property | Platform | Type | Description |
|---|---|---|---|
ssid | Android, iOS (not tvOS) | Js.Nullable.t(string) | SSID of the network. May have value Js.Nullable.undefined, Js.Nullable.null, or be an empty string if undetermined. On iOS, make sure your app meets at least one of the following requirements. On Android, make sure the ACCESS_FINE_LOCATION permission is listed in AndroidManifest.xml and accepted by the user. |
strength | Android | Js.Nullable.t(string) | If signal strength can be determined, will be an integer number from 0 to 5. May have value Js.Nullable.undefined otherwise. |
ipAddress | Android, iOS | Js.Nullable.t(string) | External IP address. Can be in IPv4 or IPv6 format. May have value Js.Nullable.undefined if undetermined. |
subnet | Android, iOS | Js.Nullable.t(string) | The subnet mask in IPv4 format. May have value Js.Nullable.undefined if undetermined. |
type is cellular| Property | Platform | Type | Description |
|---|---|---|---|
cellularGeneration | Android, iOS, Windows | NetInfoCellularGeneration | Generation of cell network the user is connected to. This can give an indication of speed, but no guarantees. May have value Js.Nullable.null if generation cannot be determined. |
carrier | Android, iOS | string | The network carrier name. May have value Js.Nullable.undefined or may be empty if undetermined. |
configureconfigure: netInfoConfiguration => unit
fetchTo query state of the active connection, returns netInfoState wrapped in a
Promise.
fetch: unit => Js.Promise.t(netInfoState)
Below example demonstrates determination of the cellular connection generation, using this method.
React.useEffect0(() => {
Js.Promise.(
ReactNativeNetInfo.fetch()
|> then_(w =>
{
switch (w##details->Js.Null.toOption) {
| None => "Connection type is none or unknown"->Js.Console.warn
| Some(x) =>
let y = x##cellularGeneration;
switch (y->Js.Nullable.toOption) {
| None =>
if (y == Js.Nullable.undefined) {
"Connection type is wifi, bluetooth, ethernet, wimax, vpn or other"
->Js.Console.warn;
} else {
"Connection generation unknown"->Js.Console.warn;
}
| Some(z) =>
if (z == ReactNativeNetInfo.net2G) {
"2G connection"->Js.Console.warn;
} else if (z == ReactNativeNetInfo.net3G) {
"3G connection"->Js.Console.warn;
} else {
"4G connection"->Js.Console.warn;
}
};
};
}
->resolve
)
|> catch(err => "error"->Js.Console.warn->resolve)
|> ignore
);
None;
});
fetchInterfaceTo query the connection state for a particular interface.
fetchInterface: [ | `cellular | `ethernet | `wifi] => Js.Promise.t(netInfoState)
addEventListenerTo subscribe to the connection state; accepts a listener of type
netInfoState => unit and returns an unsubscribe method of type unit => unit.
The listener will be called once following subscription and each time connection
state changes.
addEventListener: (netInfoState => unit) => t
where
type t = unit => unit
Below example demonstrates subscribing to changes in connection state:
React.useEffect0(() => {
let remove =
ReactNativeNetInfo.addEventListener(w =>
(
switch (w##details->Js.Null.toOption) {
| None => "Connection type is none or unknown"
| Some(x) =>
let y = x##cellularGeneration;
switch (y->Js.Nullable.toOption) {
| None =>
if (y == Js.Nullable.undefined) {
"Connection type is wifi, bluetooth, ethernet, wimax, vpn or other";
} else {
"Connection generation unknown";
}
| Some(z) =>
if (z == ReactNativeNetInfo.net2G) {
"2G connection";
} else if (z == ReactNativeNetInfo.net3G) {
"3G connection";
} else {
"4G connection";
}
};
}
)
->Js.Console.warn
);
Js.Console.warn(remove);
Some(() => remove());
});
useNetInfoThis method returns a React Hook with type netInfoState
useNetInfo: unit => netInfoState
Below example demonstrates its use within a Text component:
<Text>
(
switch (ReactNativeNetInfo.useNetInfo()##details->Js.Null.toOption) {
| None => "Connection type is none or unknown"
| Some(x) =>
let y = x##cellularGeneration;
switch (y->Js.Nullable.toOption) {
| None =>
if (y == Js.Nullable.undefined) {
"Connection type is wifi, bluetooth, ethernet, wimax, vpn or other";
} else {
"Connection generation unknown";
}
| Some(z) =>
if (z == ReactNativeNetInfo.net2G) {
"2G connection";
} else if (z == ReactNativeNetInfo.net3G) {
"3G connection";
} else {
"4G connection";
}
};
}
)
->React.string
</Text>
Check the changelog for more informations about recent releases.
Read the contribution guidelines before contributing.
We want this community to be friendly and respectful to each other. Please read our full code of conduct so that you can understand what actions will and will not be tolerated.
5.9.1 - 2020-11-17
Fix npm description
FAQs
ReScript bindings for @react-native-community/netinfo.
We found that @reason-react-native/netinfo demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
React disclosed a CVSS 10.0 RCE in React Server Components and is advising users to upgrade affected packages and frameworks to patched versions now.

Research
/Security News
We spotted a wave of auto-generated “elf-*” npm packages published every two minutes from new accounts, with simple malware variants and early takedowns underway.

Security News
TypeScript 6.0 will be the last JavaScript-based major release, as the project shifts to the TypeScript 7 native toolchain with major build speedups.