@@ -5,7 +5,10 @@ type IUseUAReturn = Omit<UAParser.IResult, 'ua'>;
55
66const 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