Skip to content

Commit 38b935e

Browse files
committed
Make sure window element is only accessed once per app
1 parent 0c1ae3b commit 38b935e

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/index.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ type IUseUAReturn = Omit<UAParser.IResult, 'ua'>;
55

66
const uaParser = new UAParser.UAParser();
77

8-
function useUA(uastring = window.navigator.userAgent) {
8+
// Access window.navigator.userAgent only once, this prevents browser from re-rendering
9+
const defaultUAString = window.navigator.userAgent;
10+
11+
function useUA(uastring = defaultUAString) {
912
return React.useMemo<IUseUAReturn | null>(() => {
1013
try {
1114
uaParser.setUA(uastring);
@@ -22,7 +25,7 @@ function useUA(uastring = window.navigator.userAgent) {
2225
}, [uastring]);
2326
}
2427

25-
function useDevice(uastring = window.navigator.userAgent) {
28+
function useDevice(uastring = defaultUAString) {
2629
return React.useMemo<UAParser.IResult['device'] | null>(() => {
2730
try {
2831
uaParser.setUA(uastring);
@@ -33,7 +36,7 @@ function useDevice(uastring = window.navigator.userAgent) {
3336
}, [uastring]);
3437
}
3538

36-
function useBrowser(uastring = window.navigator.userAgent) {
39+
function useBrowser(uastring = defaultUAString) {
3740
return React.useMemo<UAParser.IResult['browser'] | null>(() => {
3841
try {
3942
uaParser.setUA(uastring);
@@ -44,7 +47,7 @@ function useBrowser(uastring = window.navigator.userAgent) {
4447
}, [uastring]);
4548
}
4649

47-
function useCPU(uastring = window.navigator.userAgent) {
50+
function useCPU(uastring = defaultUAString) {
4851
return React.useMemo<UAParser.IResult['cpu'] | null>(() => {
4952
try {
5053
uaParser.setUA(uastring);
@@ -55,7 +58,7 @@ function useCPU(uastring = window.navigator.userAgent) {
5558
}, [uastring]);
5659
}
5760

58-
function useEngine(uastring = window.navigator.userAgent) {
61+
function useEngine(uastring = defaultUAString) {
5962
return React.useMemo<UAParser.IResult['engine'] | null>(() => {
6063
try {
6164
uaParser.setUA(uastring);

0 commit comments

Comments
 (0)