@24jieqi/react-native-brayant-ad 0.1.17 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,6 +36,18 @@ const BannerAdView = props => {
36
36
  const [dismissed, setDismissed] = (0, _react.useState)(false);
37
37
  const [height, setHeight] = (0, _react.useState)(adHeight);
38
38
 
39
+ // Use ref to track if height has been set to prevent unnecessary re-renders
40
+ const heightInitialized = (0, _react.useRef)(false);
41
+
42
+ // Reset state when visible changes from false to true to allow re-display
43
+ (0, _react.useEffect)(() => {
44
+ if (visible) {
45
+ setDismissed(false);
46
+ heightInitialized.current = false;
47
+ setHeight(adHeight);
48
+ }
49
+ }, [visible, adHeight]);
50
+
39
51
  // BannerAd is only supported on Android
40
52
  if (_reactNative.Platform.OS !== 'android') {
41
53
  return null;
@@ -44,39 +56,56 @@ const BannerAdView = props => {
44
56
  if (!BannerAdNativeComponent) {
45
57
  throw new Error(LINKING_ERROR);
46
58
  }
59
+
60
+ // Use useMemo to cache style object and prevent unnecessary re-renders
61
+ const containerStyle = (0, _react.useMemo)(() => ({
62
+ width: adWidth,
63
+ height,
64
+ ...style
65
+ }), [adWidth, height, style]);
66
+
67
+ // Stable callbacks using useCallback to prevent re-renders
68
+ const handleError = (0, _react.useCallback)(e => {
69
+ onAdError === null || onAdError === void 0 || onAdError(e.nativeEvent);
70
+ }, [onAdError]);
71
+ const handleClick = (0, _react.useCallback)(e => {
72
+ onAdClick === null || onAdClick === void 0 || onAdClick(e.nativeEvent);
73
+ }, [onAdClick]);
74
+ const handleDismiss = (0, _react.useCallback)(e => {
75
+ setDismissed(true);
76
+ onAdDismiss === null || onAdDismiss === void 0 || onAdDismiss(e.nativeEvent);
77
+ }, [onAdDismiss]);
78
+ const handleShow = (0, _react.useCallback)(e => {
79
+ onAdShow === null || onAdShow === void 0 || onAdShow(e.nativeEvent);
80
+ }, [onAdShow]);
81
+ const handleRenderSuccess = (0, _react.useCallback)(e => {
82
+ const newHeight = e.nativeEvent.height;
83
+ if (newHeight && !heightInitialized.current) {
84
+ setHeight(newHeight + 10);
85
+ heightInitialized.current = true;
86
+ }
87
+ onAdRenderSuccess === null || onAdRenderSuccess === void 0 || onAdRenderSuccess(e.nativeEvent);
88
+ }, [onAdRenderSuccess]);
89
+ const handleDislike = (0, _react.useCallback)(e => {
90
+ setDismissed(true);
91
+ onAdDislike === null || onAdDislike === void 0 || onAdDislike(e.nativeEvent);
92
+ }, [onAdDislike]);
47
93
  return /*#__PURE__*/_react.default.createElement(BannerAdNativeComponent, {
48
94
  codeid: codeid,
49
95
  adWidth: adWidth,
50
96
  adHeight: height,
51
- style: {
52
- width: adWidth,
53
- height,
54
- ...style
55
- },
56
- onAdError: e => {
57
- onAdError && onAdError(e.nativeEvent);
58
- },
59
- onAdClick: e => {
60
- onAdClick && onAdClick(e.nativeEvent);
61
- },
62
- onAdDismiss: e => {
63
- setDismissed(true);
64
- onAdDismiss && onAdDismiss(e.nativeEvent);
65
- },
66
- onAdShow: e => {
67
- onAdShow && onAdShow(e.nativeEvent);
68
- },
69
- onAdRenderSuccess: e => {
70
- if (e.nativeEvent.height) {
71
- setHeight(e.nativeEvent.height + 10);
72
- onAdRenderSuccess && onAdRenderSuccess(e.nativeEvent);
73
- }
74
- },
75
- onAdDislike: e => {
76
- setDismissed(true);
77
- onAdDislike && onAdDislike(e.nativeEvent);
78
- }
97
+ style: containerStyle,
98
+ onAdError: handleError,
99
+ onAdClick: handleClick,
100
+ onAdDismiss: handleDismiss,
101
+ onAdShow: handleShow,
102
+ onAdRenderSuccess: handleRenderSuccess,
103
+ onAdDislike: handleDislike
79
104
  });
80
105
  };
81
- var _default = exports.default = /*#__PURE__*/_react.default.memo(BannerAdView);
106
+ var _default = exports.default = /*#__PURE__*/_react.default.memo(BannerAdView, (prevProps, nextProps) => {
107
+ // Custom comparison function for React.memo
108
+ // Only re-render if visible changes or key props change
109
+ return prevProps.codeid === nextProps.codeid && prevProps.visible === nextProps.visible && prevProps.adWidth === nextProps.adWidth && prevProps.adHeight === nextProps.adHeight;
110
+ });
82
111
  //# sourceMappingURL=BannerAd.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ComponentName","Platform","select","android","ios","undefined","LINKING_ERROR","BannerAdNativeComponent","UIManager","getViewManagerConfig","requireNativeComponent","BannerAdView","props","codeid","style","adWidth","adHeight","onAdRenderSuccess","onAdError","onAdDismiss","onAdClick","onAdShow","onAdDislike","visible","dismissed","setDismissed","useState","height","setHeight","OS","Error","createElement","width","nativeEvent","_default","exports","React","memo"],"sourceRoot":"../../../../src","sources":["dy/component/BannerAd.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ComponentName","Platform","select","android","ios","undefined","LINKING_ERROR","BannerAdNativeComponent","UIManager","getViewManagerConfig","requireNativeComponent","BannerAdView","props","codeid","style","adWidth","adHeight","onAdRenderSuccess","onAdError","onAdDismiss","onAdClick","onAdShow","onAdDislike","visible","dismissed","setDismissed","useState","height","setHeight","heightInitialized","useRef","useEffect","current","OS","Error","containerStyle","useMemo","width","handleError","useCallback","nativeEvent","handleClick","handleDismiss","handleShow","handleRenderSuccess","newHeight","handleDislike","createElement","_default","exports","React","memo","prevProps","nextProps"],"sourceRoot":"../../../../src","sources":["dy/component/BannerAd.tsx"],"mappings":"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","ignoreList":[]}
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.loadDrawFeedAd = exports.default = exports.DrawFeedView = void 0;
7
- var _react = _interopRequireDefault(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
10
  /**
11
11
  * @Author: 马海
12
12
  * @createdTime: 2024-05-2024/5/18 13:39
@@ -38,27 +38,30 @@ const DrawFeedView = props => {
38
38
  style
39
39
  } = props;
40
40
  if (!visible) return null;
41
- const styleObj = style ? style : styles.container;
41
+ const styleObj = (0, _react.useMemo)(() => style || styles.container, [style]);
42
42
  if (!DrawFeedAdNativeComponent) {
43
43
  throw new Error(LINKING_ERROR);
44
44
  }
45
+
46
+ // Stable callbacks using useCallback to prevent re-renders
47
+ const handleError = (0, _react.useCallback)(e => {
48
+ console.log('onAdError DrawFeed', e.nativeEvent);
49
+ onAdError === null || onAdError === void 0 || onAdError(e.nativeEvent);
50
+ }, [onAdError]);
51
+ const handleClick = (0, _react.useCallback)(e => {
52
+ console.log('onAdClick DrawFeed', e.nativeEvent);
53
+ onAdClick === null || onAdClick === void 0 || onAdClick(e.nativeEvent);
54
+ }, [onAdClick]);
55
+ const handleShow = (0, _react.useCallback)(e => {
56
+ console.log('onAdShow DrawFeed', e.nativeEvent);
57
+ onAdShow === null || onAdShow === void 0 || onAdShow(e.nativeEvent);
58
+ }, [onAdShow]);
45
59
  return /*#__PURE__*/_react.default.createElement(DrawFeedAdNativeComponent, {
46
60
  codeid: codeid,
47
- onAdError: e => {
48
- console.log('onAdError DrawFeed', e.nativeEvent);
49
- onAdError && onAdError(e.nativeEvent);
50
- },
51
- onAdClick: e => {
52
- console.log('onAdClick DrawFeed', e.nativeEvent);
53
- onAdClick && onAdClick(e.nativeEvent);
54
- },
55
- onAdShow: e => {
56
- console.log('onAdShow DrawFeed', e.nativeEvent);
57
- onAdShow && onAdShow(e.nativeEvent);
58
- },
59
- style: {
60
- ...styleObj
61
- }
61
+ onAdError: handleError,
62
+ onAdClick: handleClick,
63
+ onAdShow: handleShow,
64
+ style: styleObj
62
65
  });
63
66
  };
64
67
  exports.DrawFeedView = DrawFeedView;
@@ -68,5 +71,9 @@ const styles = _reactNative.StyleSheet.create({
68
71
  width: '100%'
69
72
  }
70
73
  });
71
- var _default = exports.default = /*#__PURE__*/_react.default.memo(DrawFeedView);
74
+ var _default = exports.default = /*#__PURE__*/_react.default.memo(DrawFeedView, (prevProps, nextProps) => {
75
+ // Custom comparison function for React.memo
76
+ // Only re-render if visible changes or key props change
77
+ return prevProps.codeid === nextProps.codeid && prevProps.visible === nextProps.visible;
78
+ });
72
79
  //# sourceMappingURL=DrawFeedAd.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","e","__esModule","default","DrawFeedAdModule","NativeModules","LINKING_ERROR","Platform","select","ios","ComponentName","loadDrawFeedAd","info","exports","DrawFeedAdNativeComponent","UIManager","getViewManagerConfig","requireNativeComponent","undefined","DrawFeedView","props","codeid","onAdError","onAdShow","onAdClick","visible","style","styleObj","styles","container","Error","createElement","console","log","nativeEvent","StyleSheet","create","flex","width","_default","React","memo"],"sourceRoot":"../../../../src","sources":["dy/component/DrawFeedAd.tsx"],"mappings":";;;;;;AAKA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAOsB,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAbtB;AACA;AACA;AACA;AACA;;AAUA,MAAM;EAAEG;AAAiB,CAAC,GAAGC,0BAAa;AAE1C,MAAMC,aAAa,GACjB,kFAAkF,GAClFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEN,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMO,aAAa,GAAG,uBAAuB;AActC,MAAMC,cAAc,GAAIC,IAAuC,IAAK;EACzER,gBAAgB,CAACO,cAAc,CAACC,IAAI,CAAC;AACvC,CAAC;;AAED;AAAAC,OAAA,CAAAF,cAAA,GAAAA,cAAA;AACA,MAAMG,yBAAyB,GAAGC,sBAAS,CAACC,oBAAoB,CAACN,aAAa,CAAC,IAAI,IAAI,GACnF,IAAAO,mCAAsB,EAAYP,aAAa,CAAC,GAChDQ,SAAS;AAEN,MAAMC,YAAY,GAAIC,KAAsB,IAAK;EACtD,MAAM;IACJC,MAAM;IACNC,SAAS;IACTC,QAAQ;IACRC,SAAS;IACTC,OAAO,GAAG,IAAI;IACdC;EACF,CAAC,GAAGN,KAAK;EACT,IAAI,CAACK,OAAO,EAAE,OAAO,IAAI;EAEzB,MAAME,QAAQ,GAAGD,KAAK,GAAGA,KAAK,GAAGE,MAAM,CAACC,SAAS;EAEjD,IAAI,CAACf,yBAAyB,EAAE;IAC9B,MAAM,IAAIgB,KAAK,CAACxB,aAAa,CAAC;EAChC;EAEA,oBACET,MAAA,CAAAM,OAAA,CAAA4B,aAAA,CAACjB,yBAAyB;IACxBO,MAAM,EAAEA,MAAO;IACfC,SAAS,EAAGrB,CAAM,IAAK;MACrB+B,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEhC,CAAC,CAACiC,WAAW,CAAC;MAChDZ,SAAS,IAAIA,SAAS,CAACrB,CAAC,CAACiC,WAAW,CAAC;IACvC,CAAE;IACFV,SAAS,EAAGvB,CAAM,IAAK;MACrB+B,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEhC,CAAC,CAACiC,WAAW,CAAC;MAChDV,SAAS,IAAIA,SAAS,CAACvB,CAAC,CAACiC,WAAW,CAAC;IACvC,CAAE;IACFX,QAAQ,EAAGtB,CAAM,IAAK;MACpB+B,OAAO,CAACC,GAAG,CAAC,mBAAmB,EAAEhC,CAAC,CAACiC,WAAW,CAAC;MAC/CX,QAAQ,IAAIA,QAAQ,CAACtB,CAAC,CAACiC,WAAW,CAAC;IACrC,CAAE;IACFR,KAAK,EAAE;MAAE,GAAGC;IAAS;EAAE,CACxB,CAAC;AAEN,CAAC;AAACd,OAAA,CAAAM,YAAA,GAAAA,YAAA;AAEF,MAAMS,MAAM,GAAGO,uBAAU,CAACC,MAAM,CAAC;EAC/BP,SAAS,EAAE;IACTQ,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAA1B,OAAA,CAAAV,OAAA,gBAEYqC,cAAK,CAACC,IAAI,CAACtB,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DrawFeedAdModule","NativeModules","LINKING_ERROR","Platform","select","ios","ComponentName","loadDrawFeedAd","info","exports","DrawFeedAdNativeComponent","UIManager","getViewManagerConfig","requireNativeComponent","undefined","DrawFeedView","props","codeid","onAdError","onAdShow","onAdClick","visible","style","styleObj","useMemo","styles","container","Error","handleError","useCallback","console","log","nativeEvent","handleClick","handleShow","createElement","StyleSheet","create","flex","width","_default","React","memo","prevProps","nextProps"],"sourceRoot":"../../../../src","sources":["dy/component/DrawFeedAd.tsx"],"mappings":";;;;;;AAKA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAOsB,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAbtB;AACA;AACA;AACA;AACA;;AAUA,MAAM;EAAEkB;AAAiB,CAAC,GAAGC,0BAAa;AAE1C,MAAMC,aAAa,GACjB,kFAAkF,GAClFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEd,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMe,aAAa,GAAG,uBAAuB;AActC,MAAMC,cAAc,GAAIC,IAAuC,IAAK;EACzER,gBAAgB,CAACO,cAAc,CAACC,IAAI,CAAC;AACvC,CAAC;;AAED;AAAAC,OAAA,CAAAF,cAAA,GAAAA,cAAA;AACA,MAAMG,yBAAyB,GAAGC,sBAAS,CAACC,oBAAoB,CAACN,aAAa,CAAC,IAAI,IAAI,GACnF,IAAAO,mCAAsB,EAAYP,aAAa,CAAC,GAChDQ,SAAS;AAEN,MAAMC,YAAY,GAAIC,KAAsB,IAAK;EACtD,MAAM;IACJC,MAAM;IACNC,SAAS;IACTC,QAAQ;IACRC,SAAS;IACTC,OAAO,GAAG,IAAI;IACdC;EACF,CAAC,GAAGN,KAAK;EACT,IAAI,CAACK,OAAO,EAAE,OAAO,IAAI;EAEzB,MAAME,QAAQ,GAAG,IAAAC,cAAO,EAAC,MAAMF,KAAK,IAAIG,MAAM,CAACC,SAAS,EAAE,CAACJ,KAAK,CAAC,CAAC;EAElE,IAAI,CAACZ,yBAAyB,EAAE;IAC9B,MAAM,IAAIiB,KAAK,CAACzB,aAAa,CAAC;EAChC;;EAEA;EACA,MAAM0B,WAAW,GAAG,IAAAC,kBAAW,EAAEhD,CAAM,IAAK;IAC1CiD,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAElD,CAAC,CAACmD,WAAW,CAAC;IAChDd,SAAS,aAATA,SAAS,eAATA,SAAS,CAAGrC,CAAC,CAACmD,WAAW,CAAC;EAC5B,CAAC,EAAE,CAACd,SAAS,CAAC,CAAC;EAEf,MAAMe,WAAW,GAAG,IAAAJ,kBAAW,EAAEhD,CAAM,IAAK;IAC1CiD,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAElD,CAAC,CAACmD,WAAW,CAAC;IAChDZ,SAAS,aAATA,SAAS,eAATA,SAAS,CAAGvC,CAAC,CAACmD,WAAW,CAAC;EAC5B,CAAC,EAAE,CAACZ,SAAS,CAAC,CAAC;EAEf,MAAMc,UAAU,GAAG,IAAAL,kBAAW,EAAEhD,CAAM,IAAK;IACzCiD,OAAO,CAACC,GAAG,CAAC,mBAAmB,EAAElD,CAAC,CAACmD,WAAW,CAAC;IAC/Cb,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGtC,CAAC,CAACmD,WAAW,CAAC;EAC3B,CAAC,EAAE,CAACb,QAAQ,CAAC,CAAC;EAEd,oBACE1C,MAAA,CAAAc,OAAA,CAAA4C,aAAA,CAACzB,yBAAyB;IACxBO,MAAM,EAAEA,MAAO;IACfC,SAAS,EAAEU,WAAY;IACvBR,SAAS,EAAEa,WAAY;IACvBd,QAAQ,EAAEe,UAAW;IACrBZ,KAAK,EAAEC;EAAS,CACjB,CAAC;AAEN,CAAC;AAACd,OAAA,CAAAM,YAAA,GAAAA,YAAA;AAEF,MAAMU,MAAM,GAAGW,uBAAU,CAACC,MAAM,CAAC;EAC/BX,SAAS,EAAE;IACTY,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAA/B,OAAA,CAAAlB,OAAA,gBAEYkD,cAAK,CAACC,IAAI,CAAC3B,YAAY,EAAE,CAAC4B,SAAS,EAAEC,SAAS,KAAK;EAChE;EACA;EACA,OACED,SAAS,CAAC1B,MAAM,KAAK2B,SAAS,CAAC3B,MAAM,IACrC0B,SAAS,CAACtB,OAAO,KAAKuB,SAAS,CAACvB,OAAO;AAE3C,CAAC,CAAC","ignoreList":[]}
@@ -35,11 +35,50 @@ const FeedAdView = props => {
35
35
  const [closed, setClosed] = (0, _react.useState)(false);
36
36
  const [height, setHeight] = (0, _react.useState)(0);
37
37
 
38
+ // Use ref to track if height has been set to prevent unnecessary re-renders
39
+ const heightInitialized = (0, _react.useRef)(false);
40
+
41
+ // Reset state when visible changes from false to true to allow re-display
42
+ (0, _react.useEffect)(() => {
43
+ if (visible) {
44
+ setClosed(false);
45
+ heightInitialized.current = false;
46
+ setHeight(0);
47
+ }
48
+ }, [visible]);
49
+
38
50
  // FeedAd是否显示,外部和内部均可控制,外部visible、内部closed
39
51
  if (!visible || closed) return null;
40
52
  if (!FeedAdNativeComponent) {
41
53
  throw new Error(LINKING_ERROR);
42
54
  }
55
+
56
+ // Use useMemo to cache style object and prevent unnecessary re-renders
57
+ const containerStyle = (0, _react.useMemo)(() => ({
58
+ width: adWidth,
59
+ height,
60
+ ...style
61
+ }), [adWidth, height, style]);
62
+
63
+ // Stable callbacks using useCallback to prevent re-renders
64
+ const handleError = (0, _react.useCallback)(e => {
65
+ onAdError === null || onAdError === void 0 || onAdError(e.nativeEvent);
66
+ }, [onAdError]);
67
+ const handleClick = (0, _react.useCallback)(e => {
68
+ onAdClick === null || onAdClick === void 0 || onAdClick(e.nativeEvent);
69
+ }, [onAdClick]);
70
+ const handleClose = (0, _react.useCallback)(e => {
71
+ setClosed(true);
72
+ onAdClose === null || onAdClose === void 0 || onAdClose(e.nativeEvent);
73
+ }, [onAdClose]);
74
+ const handleLayout = (0, _react.useCallback)(e => {
75
+ const newHeight = e.nativeEvent.height;
76
+ if (newHeight && !heightInitialized.current) {
77
+ setHeight(newHeight + 10);
78
+ heightInitialized.current = true;
79
+ }
80
+ onAdLayout === null || onAdLayout === void 0 || onAdLayout(e.nativeEvent);
81
+ }, [onAdLayout]);
43
82
  return /*#__PURE__*/_react.default.createElement(FeedAdNativeComponent, {
44
83
  codeid: codeid
45
84
  // 里面素材的宽度,减30是有些情况下,里面素材过宽贴边显示不全
@@ -47,28 +86,16 @@ const FeedAdView = props => {
47
86
  adWidth: adWidth - 30
48
87
  // 为了不影响广告宽度占满屏幕的情况,style的width可单独控制
49
88
  ,
50
- style: {
51
- width: adWidth,
52
- height,
53
- ...style
54
- },
55
- onAdError: e => {
56
- onAdError && onAdError(e.nativeEvent);
57
- },
58
- onAdClick: e => {
59
- onAdClick && onAdClick(e.nativeEvent);
60
- },
61
- onAdClose: e => {
62
- setClosed(true);
63
- onAdClose && onAdClose(e.nativeEvent);
64
- },
65
- onAdLayout: e => {
66
- if (e.nativeEvent.height) {
67
- setHeight(e.nativeEvent.height + 10);
68
- onAdLayout && onAdLayout(e.nativeEvent);
69
- }
70
- }
89
+ style: containerStyle,
90
+ onAdError: handleError,
91
+ onAdClick: handleClick,
92
+ onAdClose: handleClose,
93
+ onAdLayout: handleLayout
71
94
  });
72
95
  };
73
- var _default = exports.default = /*#__PURE__*/_react.default.memo(FeedAdView);
96
+ var _default = exports.default = /*#__PURE__*/_react.default.memo(FeedAdView, (prevProps, nextProps) => {
97
+ // Custom comparison function for React.memo
98
+ // Only re-render if visible changes or key props change
99
+ return prevProps.codeid === nextProps.codeid && prevProps.visible === nextProps.visible && prevProps.adWidth === nextProps.adWidth;
100
+ });
74
101
  //# sourceMappingURL=FeedAd.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ComponentName","LINKING_ERROR","Platform","select","ios","FeedAdNativeComponent","UIManager","getViewManagerConfig","requireNativeComponent","undefined","FeedAdView","props","codeid","style","adWidth","onAdLayout","onAdError","onAdClose","onAdClick","visible","closed","setClosed","useState","height","setHeight","Error","createElement","width","nativeEvent","_default","exports","React","memo"],"sourceRoot":"../../../../src","sources":["dy/component/FeedAd.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ComponentName","LINKING_ERROR","Platform","select","ios","FeedAdNativeComponent","UIManager","getViewManagerConfig","requireNativeComponent","undefined","FeedAdView","props","codeid","style","adWidth","onAdLayout","onAdError","onAdClose","onAdClick","visible","closed","setClosed","useState","height","setHeight","heightInitialized","useRef","useEffect","current","Error","containerStyle","useMemo","width","handleError","useCallback","nativeEvent","handleClick","handleClose","handleLayout","newHeight","createElement","_default","exports","React","memo","prevProps","nextProps"],"sourceRoot":"../../../../src","sources":["dy/component/FeedAd.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';
2
2
  import { Platform, requireNativeComponent, UIManager } from 'react-native';
3
3
  // BannerAd currently only supports Android platform
4
4
  const ComponentName = Platform.select({
@@ -29,6 +29,18 @@ const BannerAdView = props => {
29
29
  const [dismissed, setDismissed] = useState(false);
30
30
  const [height, setHeight] = useState(adHeight);
31
31
 
32
+ // Use ref to track if height has been set to prevent unnecessary re-renders
33
+ const heightInitialized = useRef(false);
34
+
35
+ // Reset state when visible changes from false to true to allow re-display
36
+ useEffect(() => {
37
+ if (visible) {
38
+ setDismissed(false);
39
+ heightInitialized.current = false;
40
+ setHeight(adHeight);
41
+ }
42
+ }, [visible, adHeight]);
43
+
32
44
  // BannerAd is only supported on Android
33
45
  if (Platform.OS !== 'android') {
34
46
  return null;
@@ -37,39 +49,56 @@ const BannerAdView = props => {
37
49
  if (!BannerAdNativeComponent) {
38
50
  throw new Error(LINKING_ERROR);
39
51
  }
52
+
53
+ // Use useMemo to cache style object and prevent unnecessary re-renders
54
+ const containerStyle = useMemo(() => ({
55
+ width: adWidth,
56
+ height,
57
+ ...style
58
+ }), [adWidth, height, style]);
59
+
60
+ // Stable callbacks using useCallback to prevent re-renders
61
+ const handleError = useCallback(e => {
62
+ onAdError === null || onAdError === void 0 || onAdError(e.nativeEvent);
63
+ }, [onAdError]);
64
+ const handleClick = useCallback(e => {
65
+ onAdClick === null || onAdClick === void 0 || onAdClick(e.nativeEvent);
66
+ }, [onAdClick]);
67
+ const handleDismiss = useCallback(e => {
68
+ setDismissed(true);
69
+ onAdDismiss === null || onAdDismiss === void 0 || onAdDismiss(e.nativeEvent);
70
+ }, [onAdDismiss]);
71
+ const handleShow = useCallback(e => {
72
+ onAdShow === null || onAdShow === void 0 || onAdShow(e.nativeEvent);
73
+ }, [onAdShow]);
74
+ const handleRenderSuccess = useCallback(e => {
75
+ const newHeight = e.nativeEvent.height;
76
+ if (newHeight && !heightInitialized.current) {
77
+ setHeight(newHeight + 10);
78
+ heightInitialized.current = true;
79
+ }
80
+ onAdRenderSuccess === null || onAdRenderSuccess === void 0 || onAdRenderSuccess(e.nativeEvent);
81
+ }, [onAdRenderSuccess]);
82
+ const handleDislike = useCallback(e => {
83
+ setDismissed(true);
84
+ onAdDislike === null || onAdDislike === void 0 || onAdDislike(e.nativeEvent);
85
+ }, [onAdDislike]);
40
86
  return /*#__PURE__*/React.createElement(BannerAdNativeComponent, {
41
87
  codeid: codeid,
42
88
  adWidth: adWidth,
43
89
  adHeight: height,
44
- style: {
45
- width: adWidth,
46
- height,
47
- ...style
48
- },
49
- onAdError: e => {
50
- onAdError && onAdError(e.nativeEvent);
51
- },
52
- onAdClick: e => {
53
- onAdClick && onAdClick(e.nativeEvent);
54
- },
55
- onAdDismiss: e => {
56
- setDismissed(true);
57
- onAdDismiss && onAdDismiss(e.nativeEvent);
58
- },
59
- onAdShow: e => {
60
- onAdShow && onAdShow(e.nativeEvent);
61
- },
62
- onAdRenderSuccess: e => {
63
- if (e.nativeEvent.height) {
64
- setHeight(e.nativeEvent.height + 10);
65
- onAdRenderSuccess && onAdRenderSuccess(e.nativeEvent);
66
- }
67
- },
68
- onAdDislike: e => {
69
- setDismissed(true);
70
- onAdDislike && onAdDislike(e.nativeEvent);
71
- }
90
+ style: containerStyle,
91
+ onAdError: handleError,
92
+ onAdClick: handleClick,
93
+ onAdDismiss: handleDismiss,
94
+ onAdShow: handleShow,
95
+ onAdRenderSuccess: handleRenderSuccess,
96
+ onAdDislike: handleDislike
72
97
  });
73
98
  };
74
- export default /*#__PURE__*/React.memo(BannerAdView);
99
+ export default /*#__PURE__*/React.memo(BannerAdView, (prevProps, nextProps) => {
100
+ // Custom comparison function for React.memo
101
+ // Only re-render if visible changes or key props change
102
+ return prevProps.codeid === nextProps.codeid && prevProps.visible === nextProps.visible && prevProps.adWidth === nextProps.adWidth && prevProps.adHeight === nextProps.adHeight;
103
+ });
75
104
  //# sourceMappingURL=BannerAd.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","Platform","requireNativeComponent","UIManager","ComponentName","select","android","ios","undefined","LINKING_ERROR","default","BannerAdNativeComponent","getViewManagerConfig","BannerAdView","props","codeid","style","adWidth","adHeight","onAdRenderSuccess","onAdError","onAdDismiss","onAdClick","onAdShow","onAdDislike","visible","dismissed","setDismissed","height","setHeight","OS","Error","createElement","width","e","nativeEvent","memo"],"sourceRoot":"../../../../src","sources":["dy/component/BannerAd.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,QAAQ,EAAEC,sBAAsB,EAAEC,SAAS,QAAQ,cAAc;AAG1E;AACA,MAAMC,aAAa,GAAGH,QAAQ,CAACI,MAAM,CAAC;EACpCC,OAAO,EAAE,4BAA4B;EACrCC,GAAG,EAAEC;AACP,CAAC,CAAuB;AAgBxB,MAAMC,aAAa,GACjB,kFAAkF,GAClFR,QAAQ,CAACI,MAAM,CAAC;EAAEE,GAAG,EAAE,gCAAgC;EAAEG,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B,GAC/B,mEAAmE;;AAErE;AACA,MAAMC,uBAAuB,GAAGP,aAAa,IAAID,SAAS,CAACS,oBAAoB,CAACR,aAAa,CAAC,IAAI,IAAI,GAClGF,sBAAsB,CAAgBE,aAAa,CAAC,GACpDI,SAAS;AAEb,MAAMK,YAAY,GAAIC,KAAoB,IAAK;EAC7C,MAAM;IACJC,MAAM;IACNC,KAAK;IACLC,OAAO,GAAG,GAAG;IACbC,QAAQ,GAAG,EAAE;IACbC,iBAAiB;IACjBC,SAAS;IACTC,WAAW;IACXC,SAAS;IACTC,QAAQ;IACRC,WAAW;IACXC,OAAO,GAAG;EACZ,CAAC,GAAGX,KAAK;EAET,MAAM,CAACY,SAAS,EAAEC,YAAY,CAAC,GAAG3B,QAAQ,CAAC,KAAK,CAAC;EACjD,MAAM,CAAC4B,MAAM,EAAEC,SAAS,CAAC,GAAG7B,QAAQ,CAACkB,QAAQ,CAAC;;EAE9C;EACA,IAAIjB,QAAQ,CAAC6B,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAO,IAAI;EACb;EAEA,IAAI,CAACL,OAAO,IAAIC,SAAS,EAAE,OAAO,IAAI;EAEtC,IAAI,CAACf,uBAAuB,EAAE;IAC5B,MAAM,IAAIoB,KAAK,CAACtB,aAAa,CAAC;EAChC;EAEA,oBACEV,KAAA,CAAAiC,aAAA,CAACrB,uBAAuB;IACtBI,MAAM,EAAEA,MAAO;IACfE,OAAO,EAAEA,OAAQ;IACjBC,QAAQ,EAAEU,MAAO;IACjBZ,KAAK,EAAE;MAAEiB,KAAK,EAAEhB,OAAO;MAAEW,MAAM;MAAE,GAAGZ;IAAM,CAAE;IAC5CI,SAAS,EAAGc,CAAM,IAAK;MACrBd,SAAS,IAAIA,SAAS,CAACc,CAAC,CAACC,WAAW,CAAC;IACvC,CAAE;IACFb,SAAS,EAAGY,CAAM,IAAK;MACrBZ,SAAS,IAAIA,SAAS,CAACY,CAAC,CAACC,WAAW,CAAC;IACvC,CAAE;IACFd,WAAW,EAAGa,CAAM,IAAK;MACvBP,YAAY,CAAC,IAAI,CAAC;MAClBN,WAAW,IAAIA,WAAW,CAACa,CAAC,CAACC,WAAW,CAAC;IAC3C,CAAE;IACFZ,QAAQ,EAAGW,CAAM,IAAK;MACpBX,QAAQ,IAAIA,QAAQ,CAACW,CAAC,CAACC,WAAW,CAAC;IACrC,CAAE;IACFhB,iBAAiB,EAAGe,CAAM,IAAK;MAC7B,IAAIA,CAAC,CAACC,WAAW,CAACP,MAAM,EAAE;QACxBC,SAAS,CAACK,CAAC,CAACC,WAAW,CAACP,MAAM,GAAG,EAAE,CAAC;QACpCT,iBAAiB,IAAIA,iBAAiB,CAACe,CAAC,CAACC,WAAW,CAAC;MACvD;IACF,CAAE;IACFX,WAAW,EAAGU,CAAM,IAAK;MACvBP,YAAY,CAAC,IAAI,CAAC;MAClBH,WAAW,IAAIA,WAAW,CAACU,CAAC,CAACC,WAAW,CAAC;IAC3C;EAAE,CACH,CAAC;AAEN,CAAC;AAED,4BAAepC,KAAK,CAACqC,IAAI,CAACvB,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useCallback","useRef","useEffect","useMemo","Platform","requireNativeComponent","UIManager","ComponentName","select","android","ios","undefined","LINKING_ERROR","default","BannerAdNativeComponent","getViewManagerConfig","BannerAdView","props","codeid","style","adWidth","adHeight","onAdRenderSuccess","onAdError","onAdDismiss","onAdClick","onAdShow","onAdDislike","visible","dismissed","setDismissed","height","setHeight","heightInitialized","current","OS","Error","containerStyle","width","handleError","e","nativeEvent","handleClick","handleDismiss","handleShow","handleRenderSuccess","newHeight","handleDislike","createElement","memo","prevProps","nextProps"],"sourceRoot":"../../../../src","sources":["dy/component/BannerAd.tsx"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  * @createdTime: 2024-05-2024/5/18 13:39
4
4
  * @description: description
5
5
  */
6
- import React from 'react';
6
+ import React, { useCallback, useMemo } from 'react';
7
7
  import { UIManager, StyleSheet, NativeModules, Platform, requireNativeComponent } from 'react-native';
8
8
  const {
9
9
  DrawFeedAdModule
@@ -29,27 +29,30 @@ export const DrawFeedView = props => {
29
29
  style
30
30
  } = props;
31
31
  if (!visible) return null;
32
- const styleObj = style ? style : styles.container;
32
+ const styleObj = useMemo(() => style || styles.container, [style]);
33
33
  if (!DrawFeedAdNativeComponent) {
34
34
  throw new Error(LINKING_ERROR);
35
35
  }
36
+
37
+ // Stable callbacks using useCallback to prevent re-renders
38
+ const handleError = useCallback(e => {
39
+ console.log('onAdError DrawFeed', e.nativeEvent);
40
+ onAdError === null || onAdError === void 0 || onAdError(e.nativeEvent);
41
+ }, [onAdError]);
42
+ const handleClick = useCallback(e => {
43
+ console.log('onAdClick DrawFeed', e.nativeEvent);
44
+ onAdClick === null || onAdClick === void 0 || onAdClick(e.nativeEvent);
45
+ }, [onAdClick]);
46
+ const handleShow = useCallback(e => {
47
+ console.log('onAdShow DrawFeed', e.nativeEvent);
48
+ onAdShow === null || onAdShow === void 0 || onAdShow(e.nativeEvent);
49
+ }, [onAdShow]);
36
50
  return /*#__PURE__*/React.createElement(DrawFeedAdNativeComponent, {
37
51
  codeid: codeid,
38
- onAdError: e => {
39
- console.log('onAdError DrawFeed', e.nativeEvent);
40
- onAdError && onAdError(e.nativeEvent);
41
- },
42
- onAdClick: e => {
43
- console.log('onAdClick DrawFeed', e.nativeEvent);
44
- onAdClick && onAdClick(e.nativeEvent);
45
- },
46
- onAdShow: e => {
47
- console.log('onAdShow DrawFeed', e.nativeEvent);
48
- onAdShow && onAdShow(e.nativeEvent);
49
- },
50
- style: {
51
- ...styleObj
52
- }
52
+ onAdError: handleError,
53
+ onAdClick: handleClick,
54
+ onAdShow: handleShow,
55
+ style: styleObj
53
56
  });
54
57
  };
55
58
  const styles = StyleSheet.create({
@@ -58,5 +61,9 @@ const styles = StyleSheet.create({
58
61
  width: '100%'
59
62
  }
60
63
  });
61
- export default /*#__PURE__*/React.memo(DrawFeedView);
64
+ export default /*#__PURE__*/React.memo(DrawFeedView, (prevProps, nextProps) => {
65
+ // Custom comparison function for React.memo
66
+ // Only re-render if visible changes or key props change
67
+ return prevProps.codeid === nextProps.codeid && prevProps.visible === nextProps.visible;
68
+ });
62
69
  //# sourceMappingURL=DrawFeedAd.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","UIManager","StyleSheet","NativeModules","Platform","requireNativeComponent","DrawFeedAdModule","LINKING_ERROR","select","ios","default","ComponentName","loadDrawFeedAd","info","DrawFeedAdNativeComponent","getViewManagerConfig","undefined","DrawFeedView","props","codeid","onAdError","onAdShow","onAdClick","visible","style","styleObj","styles","container","Error","createElement","e","console","log","nativeEvent","create","flex","width","memo"],"sourceRoot":"../../../../src","sources":["dy/component/DrawFeedAd.tsx"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAEEC,SAAS,EACTC,UAAU,EACVC,aAAa,EACbC,QAAQ,EACRC,sBAAsB,QACjB,cAAc;AACrB,MAAM;EAAEC;AAAiB,CAAC,GAAGH,aAAa;AAE1C,MAAMI,aAAa,GACjB,kFAAkF,GAClFH,QAAQ,CAACI,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,aAAa,GAAG,uBAAuB;AAc7C,OAAO,MAAMC,cAAc,GAAIC,IAAuC,IAAK;EACzEP,gBAAgB,CAACM,cAAc,CAACC,IAAI,CAAC;AACvC,CAAC;;AAED;AACA,MAAMC,yBAAyB,GAAGb,SAAS,CAACc,oBAAoB,CAACJ,aAAa,CAAC,IAAI,IAAI,GACnFN,sBAAsB,CAAYM,aAAa,CAAC,GAChDK,SAAS;AAEb,OAAO,MAAMC,YAAY,GAAIC,KAAsB,IAAK;EACtD,MAAM;IACJC,MAAM;IACNC,SAAS;IACTC,QAAQ;IACRC,SAAS;IACTC,OAAO,GAAG,IAAI;IACdC;EACF,CAAC,GAAGN,KAAK;EACT,IAAI,CAACK,OAAO,EAAE,OAAO,IAAI;EAEzB,MAAME,QAAQ,GAAGD,KAAK,GAAGA,KAAK,GAAGE,MAAM,CAACC,SAAS;EAEjD,IAAI,CAACb,yBAAyB,EAAE;IAC9B,MAAM,IAAIc,KAAK,CAACrB,aAAa,CAAC;EAChC;EAEA,oBACEP,KAAA,CAAA6B,aAAA,CAACf,yBAAyB;IACxBK,MAAM,EAAEA,MAAO;IACfC,SAAS,EAAGU,CAAM,IAAK;MACrBC,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEF,CAAC,CAACG,WAAW,CAAC;MAChDb,SAAS,IAAIA,SAAS,CAACU,CAAC,CAACG,WAAW,CAAC;IACvC,CAAE;IACFX,SAAS,EAAGQ,CAAM,IAAK;MACrBC,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEF,CAAC,CAACG,WAAW,CAAC;MAChDX,SAAS,IAAIA,SAAS,CAACQ,CAAC,CAACG,WAAW,CAAC;IACvC,CAAE;IACFZ,QAAQ,EAAGS,CAAM,IAAK;MACpBC,OAAO,CAACC,GAAG,CAAC,mBAAmB,EAAEF,CAAC,CAACG,WAAW,CAAC;MAC/CZ,QAAQ,IAAIA,QAAQ,CAACS,CAAC,CAACG,WAAW,CAAC;IACrC,CAAE;IACFT,KAAK,EAAE;MAAE,GAAGC;IAAS;EAAE,CACxB,CAAC;AAEN,CAAC;AAED,MAAMC,MAAM,GAAGxB,UAAU,CAACgC,MAAM,CAAC;EAC/BP,SAAS,EAAE;IACTQ,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,4BAAepC,KAAK,CAACqC,IAAI,CAACpB,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useMemo","UIManager","StyleSheet","NativeModules","Platform","requireNativeComponent","DrawFeedAdModule","LINKING_ERROR","select","ios","default","ComponentName","loadDrawFeedAd","info","DrawFeedAdNativeComponent","getViewManagerConfig","undefined","DrawFeedView","props","codeid","onAdError","onAdShow","onAdClick","visible","style","styleObj","styles","container","Error","handleError","e","console","log","nativeEvent","handleClick","handleShow","createElement","create","flex","width","memo","prevProps","nextProps"],"sourceRoot":"../../../../src","sources":["dy/component/DrawFeedAd.tsx"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  * @createdTime: 2024-05-2024/5/20 22:00
4
4
  * @description: description
5
5
  */
6
- import React, { useState } from 'react';
6
+ import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';
7
7
  import { Platform, requireNativeComponent, UIManager } from 'react-native';
8
8
  const ComponentName = 'FeedAdViewManager';
9
9
  const LINKING_ERROR = `The package 'react-native-brayant-ad' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
@@ -27,11 +27,50 @@ const FeedAdView = props => {
27
27
  const [closed, setClosed] = useState(false);
28
28
  const [height, setHeight] = useState(0);
29
29
 
30
+ // Use ref to track if height has been set to prevent unnecessary re-renders
31
+ const heightInitialized = useRef(false);
32
+
33
+ // Reset state when visible changes from false to true to allow re-display
34
+ useEffect(() => {
35
+ if (visible) {
36
+ setClosed(false);
37
+ heightInitialized.current = false;
38
+ setHeight(0);
39
+ }
40
+ }, [visible]);
41
+
30
42
  // FeedAd是否显示,外部和内部均可控制,外部visible、内部closed
31
43
  if (!visible || closed) return null;
32
44
  if (!FeedAdNativeComponent) {
33
45
  throw new Error(LINKING_ERROR);
34
46
  }
47
+
48
+ // Use useMemo to cache style object and prevent unnecessary re-renders
49
+ const containerStyle = useMemo(() => ({
50
+ width: adWidth,
51
+ height,
52
+ ...style
53
+ }), [adWidth, height, style]);
54
+
55
+ // Stable callbacks using useCallback to prevent re-renders
56
+ const handleError = useCallback(e => {
57
+ onAdError === null || onAdError === void 0 || onAdError(e.nativeEvent);
58
+ }, [onAdError]);
59
+ const handleClick = useCallback(e => {
60
+ onAdClick === null || onAdClick === void 0 || onAdClick(e.nativeEvent);
61
+ }, [onAdClick]);
62
+ const handleClose = useCallback(e => {
63
+ setClosed(true);
64
+ onAdClose === null || onAdClose === void 0 || onAdClose(e.nativeEvent);
65
+ }, [onAdClose]);
66
+ const handleLayout = useCallback(e => {
67
+ const newHeight = e.nativeEvent.height;
68
+ if (newHeight && !heightInitialized.current) {
69
+ setHeight(newHeight + 10);
70
+ heightInitialized.current = true;
71
+ }
72
+ onAdLayout === null || onAdLayout === void 0 || onAdLayout(e.nativeEvent);
73
+ }, [onAdLayout]);
35
74
  return /*#__PURE__*/React.createElement(FeedAdNativeComponent, {
36
75
  codeid: codeid
37
76
  // 里面素材的宽度,减30是有些情况下,里面素材过宽贴边显示不全
@@ -39,28 +78,16 @@ const FeedAdView = props => {
39
78
  adWidth: adWidth - 30
40
79
  // 为了不影响广告宽度占满屏幕的情况,style的width可单独控制
41
80
  ,
42
- style: {
43
- width: adWidth,
44
- height,
45
- ...style
46
- },
47
- onAdError: e => {
48
- onAdError && onAdError(e.nativeEvent);
49
- },
50
- onAdClick: e => {
51
- onAdClick && onAdClick(e.nativeEvent);
52
- },
53
- onAdClose: e => {
54
- setClosed(true);
55
- onAdClose && onAdClose(e.nativeEvent);
56
- },
57
- onAdLayout: e => {
58
- if (e.nativeEvent.height) {
59
- setHeight(e.nativeEvent.height + 10);
60
- onAdLayout && onAdLayout(e.nativeEvent);
61
- }
62
- }
81
+ style: containerStyle,
82
+ onAdError: handleError,
83
+ onAdClick: handleClick,
84
+ onAdClose: handleClose,
85
+ onAdLayout: handleLayout
63
86
  });
64
87
  };
65
- export default /*#__PURE__*/React.memo(FeedAdView);
88
+ export default /*#__PURE__*/React.memo(FeedAdView, (prevProps, nextProps) => {
89
+ // Custom comparison function for React.memo
90
+ // Only re-render if visible changes or key props change
91
+ return prevProps.codeid === nextProps.codeid && prevProps.visible === nextProps.visible && prevProps.adWidth === nextProps.adWidth;
92
+ });
66
93
  //# sourceMappingURL=FeedAd.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","Platform","requireNativeComponent","UIManager","ComponentName","LINKING_ERROR","select","ios","default","FeedAdNativeComponent","getViewManagerConfig","undefined","FeedAdView","props","codeid","style","adWidth","onAdLayout","onAdError","onAdClose","onAdClick","visible","closed","setClosed","height","setHeight","Error","createElement","width","e","nativeEvent","memo"],"sourceRoot":"../../../../src","sources":["dy/component/FeedAd.tsx"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,QAAQ,EAAEC,sBAAsB,EAAEC,SAAS,QAAQ,cAAc;AAG1E,MAAMC,aAAa,GAAG,mBAAmB;AAazC,MAAMC,aAAa,GACjB,kFAAkF,GAClFJ,QAAQ,CAACK,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;;AAEjC;AACA,MAAMC,qBAAqB,GAAGN,SAAS,CAACO,oBAAoB,CAACN,aAAa,CAAC,IAAI,IAAI,GAC/EF,sBAAsB,CAAcE,aAAa,CAAC,GAClDO,SAAS;AAEb,MAAMC,UAAU,GAAIC,KAAkB,IAAK;EACzC,MAAM;IACJC,MAAM;IACNC,KAAK;IACLC,OAAO,GAAG,GAAG;IACbC,UAAU;IACVC,SAAS;IACTC,SAAS;IACTC,SAAS;IACTC,OAAO,GAAG;EACZ,CAAC,GAAGR,KAAK;EAET,MAAM,CAACS,MAAM,EAAEC,SAAS,CAAC,GAAGvB,QAAQ,CAAC,KAAK,CAAC;EAC3C,MAAM,CAACwB,MAAM,EAAEC,SAAS,CAAC,GAAGzB,QAAQ,CAAC,CAAC,CAAC;;EAEvC;EACA,IAAI,CAACqB,OAAO,IAAIC,MAAM,EAAE,OAAO,IAAI;EAEnC,IAAI,CAACb,qBAAqB,EAAE;IAC1B,MAAM,IAAIiB,KAAK,CAACrB,aAAa,CAAC;EAChC;EAEA,oBACEN,KAAA,CAAA4B,aAAA,CAAClB,qBAAqB;IACpBK,MAAM,EAAEA;IACR;IAAA;IACAE,OAAO,EAAEA,OAAO,GAAG;IACnB;IAAA;IACAD,KAAK,EAAE;MAAEa,KAAK,EAAEZ,OAAO;MAAEQ,MAAM;MAAE,GAAGT;IAAM,CAAE;IAC5CG,SAAS,EAAGW,CAAM,IAAK;MACrBX,SAAS,IAAIA,SAAS,CAACW,CAAC,CAACC,WAAW,CAAC;IACvC,CAAE;IACFV,SAAS,EAAGS,CAAM,IAAK;MACrBT,SAAS,IAAIA,SAAS,CAACS,CAAC,CAACC,WAAW,CAAC;IACvC,CAAE;IACFX,SAAS,EAAGU,CAAM,IAAK;MACrBN,SAAS,CAAC,IAAI,CAAC;MACfJ,SAAS,IAAIA,SAAS,CAACU,CAAC,CAACC,WAAW,CAAC;IACvC,CAAE;IACFb,UAAU,EAAGY,CAAM,IAAK;MACtB,IAAIA,CAAC,CAACC,WAAW,CAACN,MAAM,EAAE;QACxBC,SAAS,CAACI,CAAC,CAACC,WAAW,CAACN,MAAM,GAAG,EAAE,CAAC;QACpCP,UAAU,IAAIA,UAAU,CAACY,CAAC,CAACC,WAAW,CAAC;MACzC;IACF;EAAE,CACH,CAAC;AAEN,CAAC;AAED,4BAAe/B,KAAK,CAACgC,IAAI,CAACnB,UAAU,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useCallback","useRef","useEffect","useMemo","Platform","requireNativeComponent","UIManager","ComponentName","LINKING_ERROR","select","ios","default","FeedAdNativeComponent","getViewManagerConfig","undefined","FeedAdView","props","codeid","style","adWidth","onAdLayout","onAdError","onAdClose","onAdClick","visible","closed","setClosed","height","setHeight","heightInitialized","current","Error","containerStyle","width","handleError","e","nativeEvent","handleClick","handleClose","handleLayout","newHeight","createElement","memo","prevProps","nextProps"],"sourceRoot":"../../../../src","sources":["dy/component/FeedAd.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"BannerAd.d.ts","sourceRoot":"","sources":["../../../../../src/dy/component/BannerAd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ9C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,CAAC;CACxB;0DAc4B,aAAa;AA8D1C,wBAAwC"}
1
+ {"version":3,"file":"BannerAd.d.ts","sourceRoot":"","sources":["../../../../../src/dy/component/BannerAd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ9C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,CAAC;CACxB;0DAc4B,aAAa;AAgG1C,wBASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"DrawFeedAd.d.ts","sourceRoot":"","sources":["../../../../../src/dy/component/DrawFeedAd.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,cAAc,CAAC;AAWtB,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB,CAAC;AAIF,eAAO,MAAM,cAAc,GAAI,MAAM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,SAErE,CAAC;AAOF,eAAO,MAAM,YAAY,GAAI,OAAO,eAAe,6BAmClD,CAAC;0DAnCkC,eAAe;AA4CnD,wBAAwC"}
1
+ {"version":3,"file":"DrawFeedAd.d.ts","sourceRoot":"","sources":["../../../../../src/dy/component/DrawFeedAd.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAA+B,MAAM,OAAO,CAAC;AACpD,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,cAAc,CAAC;AAWtB,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB,CAAC;AAIF,eAAO,MAAM,cAAc,GAAI,MAAM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,SAErE,CAAC;AAOF,eAAO,MAAM,YAAY,GAAI,OAAO,eAAe,6BA0ClD,CAAC;0DA1CkC,eAAe;AAmDnD,wBAOG"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeedAd.d.ts","sourceRoot":"","sources":["../../../../../src/dy/component/FeedAd.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;0DAa0B,WAAW;AAiDtC,wBAAsC"}
1
+ {"version":3,"file":"FeedAd.d.ts","sourceRoot":"","sources":["../../../../../src/dy/component/FeedAd.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;0DAa0B,WAAW;AA+EtC,wBAQG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@24jieqi/react-native-brayant-ad",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
4
4
  "description": "国内广告联盟sdk封装",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -1,4 +1,4 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';
2
2
  import { Platform, requireNativeComponent, UIManager } from 'react-native';
3
3
  import type { ViewStyle } from 'react-native';
4
4
 
@@ -52,6 +52,18 @@ const BannerAdView = (props: BannerAdProps) => {
52
52
  const [dismissed, setDismissed] = useState(false);
53
53
  const [height, setHeight] = useState(adHeight);
54
54
 
55
+ // Use ref to track if height has been set to prevent unnecessary re-renders
56
+ const heightInitialized = useRef(false);
57
+
58
+ // Reset state when visible changes from false to true to allow re-display
59
+ useEffect(() => {
60
+ if (visible) {
61
+ setDismissed(false);
62
+ heightInitialized.current = false;
63
+ setHeight(adHeight);
64
+ }
65
+ }, [visible, adHeight]);
66
+
55
67
  // BannerAd is only supported on Android
56
68
  if (Platform.OS !== 'android') {
57
69
  return null;
@@ -63,38 +75,69 @@ const BannerAdView = (props: BannerAdProps) => {
63
75
  throw new Error(LINKING_ERROR);
64
76
  }
65
77
 
78
+ // Use useMemo to cache style object and prevent unnecessary re-renders
79
+ const containerStyle = useMemo(() => ({
80
+ width: adWidth,
81
+ height,
82
+ ...style,
83
+ }), [adWidth, height, style]);
84
+
85
+ // Stable callbacks using useCallback to prevent re-renders
86
+ const handleError = useCallback((e: any) => {
87
+ onAdError?.(e.nativeEvent);
88
+ }, [onAdError]);
89
+
90
+ const handleClick = useCallback((e: any) => {
91
+ onAdClick?.(e.nativeEvent);
92
+ }, [onAdClick]);
93
+
94
+ const handleDismiss = useCallback((e: any) => {
95
+ setDismissed(true);
96
+ onAdDismiss?.(e.nativeEvent);
97
+ }, [onAdDismiss]);
98
+
99
+ const handleShow = useCallback((e: any) => {
100
+ onAdShow?.(e.nativeEvent);
101
+ }, [onAdShow]);
102
+
103
+ const handleRenderSuccess = useCallback((e: any) => {
104
+ const newHeight = e.nativeEvent.height;
105
+ if (newHeight && !heightInitialized.current) {
106
+ setHeight(newHeight + 10);
107
+ heightInitialized.current = true;
108
+ }
109
+ onAdRenderSuccess?.(e.nativeEvent);
110
+ }, [onAdRenderSuccess]);
111
+
112
+ const handleDislike = useCallback((e: any) => {
113
+ setDismissed(true);
114
+ onAdDislike?.(e.nativeEvent);
115
+ }, [onAdDislike]);
116
+
66
117
  return (
67
118
  <BannerAdNativeComponent
68
119
  codeid={codeid}
69
120
  adWidth={adWidth}
70
121
  adHeight={height}
71
- style={{ width: adWidth, height, ...style }}
72
- onAdError={(e: any) => {
73
- onAdError && onAdError(e.nativeEvent);
74
- }}
75
- onAdClick={(e: any) => {
76
- onAdClick && onAdClick(e.nativeEvent);
77
- }}
78
- onAdDismiss={(e: any) => {
79
- setDismissed(true);
80
- onAdDismiss && onAdDismiss(e.nativeEvent);
81
- }}
82
- onAdShow={(e: any) => {
83
- onAdShow && onAdShow(e.nativeEvent);
84
- }}
85
- onAdRenderSuccess={(e: any) => {
86
- if (e.nativeEvent.height) {
87
- setHeight(e.nativeEvent.height + 10);
88
- onAdRenderSuccess && onAdRenderSuccess(e.nativeEvent);
89
- }
90
- }}
91
- onAdDislike={(e: any) => {
92
- setDismissed(true);
93
- onAdDislike && onAdDislike(e.nativeEvent);
94
- }}
122
+ style={containerStyle}
123
+ onAdError={handleError}
124
+ onAdClick={handleClick}
125
+ onAdDismiss={handleDismiss}
126
+ onAdShow={handleShow}
127
+ onAdRenderSuccess={handleRenderSuccess}
128
+ onAdDislike={handleDislike}
95
129
  />
96
130
  );
97
131
  };
98
132
 
99
- export default React.memo(BannerAdView);
133
+ export default React.memo(BannerAdView, (prevProps, nextProps) => {
134
+ // Custom comparison function for React.memo
135
+ // Only re-render if visible changes or key props change
136
+ return (
137
+ prevProps.codeid === nextProps.codeid &&
138
+ prevProps.visible === nextProps.visible &&
139
+ prevProps.adWidth === nextProps.adWidth &&
140
+ prevProps.adHeight === nextProps.adHeight
141
+ );
142
+ });
100
143
 
@@ -3,7 +3,7 @@
3
3
  * @createdTime: 2024-05-2024/5/18 13:39
4
4
  * @description: description
5
5
  */
6
- import React from 'react';
6
+ import React, { useCallback, useMemo } from 'react';
7
7
  import {
8
8
  type ViewStyle,
9
9
  UIManager,
@@ -54,28 +54,35 @@ export const DrawFeedView = (props: DrawFeedAdProps) => {
54
54
  } = props;
55
55
  if (!visible) return null;
56
56
 
57
- const styleObj = style ? style : styles.container;
57
+ const styleObj = useMemo(() => style || styles.container, [style]);
58
58
 
59
59
  if (!DrawFeedAdNativeComponent) {
60
60
  throw new Error(LINKING_ERROR);
61
61
  }
62
62
 
63
+ // Stable callbacks using useCallback to prevent re-renders
64
+ const handleError = useCallback((e: any) => {
65
+ console.log('onAdError DrawFeed', e.nativeEvent);
66
+ onAdError?.(e.nativeEvent);
67
+ }, [onAdError]);
68
+
69
+ const handleClick = useCallback((e: any) => {
70
+ console.log('onAdClick DrawFeed', e.nativeEvent);
71
+ onAdClick?.(e.nativeEvent);
72
+ }, [onAdClick]);
73
+
74
+ const handleShow = useCallback((e: any) => {
75
+ console.log('onAdShow DrawFeed', e.nativeEvent);
76
+ onAdShow?.(e.nativeEvent);
77
+ }, [onAdShow]);
78
+
63
79
  return (
64
80
  <DrawFeedAdNativeComponent
65
81
  codeid={codeid}
66
- onAdError={(e: any) => {
67
- console.log('onAdError DrawFeed', e.nativeEvent);
68
- onAdError && onAdError(e.nativeEvent);
69
- }}
70
- onAdClick={(e: any) => {
71
- console.log('onAdClick DrawFeed', e.nativeEvent);
72
- onAdClick && onAdClick(e.nativeEvent);
73
- }}
74
- onAdShow={(e: any) => {
75
- console.log('onAdShow DrawFeed', e.nativeEvent);
76
- onAdShow && onAdShow(e.nativeEvent);
77
- }}
78
- style={{ ...styleObj }}
82
+ onAdError={handleError}
83
+ onAdClick={handleClick}
84
+ onAdShow={handleShow}
85
+ style={styleObj}
79
86
  />
80
87
  );
81
88
  };
@@ -87,4 +94,11 @@ const styles = StyleSheet.create({
87
94
  },
88
95
  });
89
96
 
90
- export default React.memo(DrawFeedView);
97
+ export default React.memo(DrawFeedView, (prevProps, nextProps) => {
98
+ // Custom comparison function for React.memo
99
+ // Only re-render if visible changes or key props change
100
+ return (
101
+ prevProps.codeid === nextProps.codeid &&
102
+ prevProps.visible === nextProps.visible
103
+ );
104
+ });
@@ -3,7 +3,7 @@
3
3
  * @createdTime: 2024-05-2024/5/20 22:00
4
4
  * @description: description
5
5
  */
6
- import React, { useState } from 'react';
6
+ import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';
7
7
  import { Platform, requireNativeComponent, UIManager } from 'react-native';
8
8
  import type { ViewStyle } from 'react-native';
9
9
 
@@ -46,6 +46,18 @@ const FeedAdView = (props: FeedAdProps) => {
46
46
  const [closed, setClosed] = useState(false);
47
47
  const [height, setHeight] = useState(0);
48
48
 
49
+ // Use ref to track if height has been set to prevent unnecessary re-renders
50
+ const heightInitialized = useRef(false);
51
+
52
+ // Reset state when visible changes from false to true to allow re-display
53
+ useEffect(() => {
54
+ if (visible) {
55
+ setClosed(false);
56
+ heightInitialized.current = false;
57
+ setHeight(0);
58
+ }
59
+ }, [visible]);
60
+
49
61
  // FeedAd是否显示,外部和内部均可控制,外部visible、内部closed
50
62
  if (!visible || closed) return null;
51
63
 
@@ -53,31 +65,57 @@ const FeedAdView = (props: FeedAdProps) => {
53
65
  throw new Error(LINKING_ERROR);
54
66
  }
55
67
 
68
+ // Use useMemo to cache style object and prevent unnecessary re-renders
69
+ const containerStyle = useMemo(() => ({
70
+ width: adWidth,
71
+ height,
72
+ ...style,
73
+ }), [adWidth, height, style]);
74
+
75
+ // Stable callbacks using useCallback to prevent re-renders
76
+ const handleError = useCallback((e: any) => {
77
+ onAdError?.(e.nativeEvent);
78
+ }, [onAdError]);
79
+
80
+ const handleClick = useCallback((e: any) => {
81
+ onAdClick?.(e.nativeEvent);
82
+ }, [onAdClick]);
83
+
84
+ const handleClose = useCallback((e: any) => {
85
+ setClosed(true);
86
+ onAdClose?.(e.nativeEvent);
87
+ }, [onAdClose]);
88
+
89
+ const handleLayout = useCallback((e: any) => {
90
+ const newHeight = e.nativeEvent.height;
91
+ if (newHeight && !heightInitialized.current) {
92
+ setHeight(newHeight + 10);
93
+ heightInitialized.current = true;
94
+ }
95
+ onAdLayout?.(e.nativeEvent);
96
+ }, [onAdLayout]);
97
+
56
98
  return (
57
99
  <FeedAdNativeComponent
58
100
  codeid={codeid}
59
101
  // 里面素材的宽度,减30是有些情况下,里面素材过宽贴边显示不全
60
102
  adWidth={adWidth - 30}
61
103
  // 为了不影响广告宽度占满屏幕的情况,style的width可单独控制
62
- style={{ width: adWidth, height, ...style }}
63
- onAdError={(e: any) => {
64
- onAdError && onAdError(e.nativeEvent);
65
- }}
66
- onAdClick={(e: any) => {
67
- onAdClick && onAdClick(e.nativeEvent);
68
- }}
69
- onAdClose={(e: any) => {
70
- setClosed(true);
71
- onAdClose && onAdClose(e.nativeEvent);
72
- }}
73
- onAdLayout={(e: any) => {
74
- if (e.nativeEvent.height) {
75
- setHeight(e.nativeEvent.height + 10);
76
- onAdLayout && onAdLayout(e.nativeEvent);
77
- }
78
- }}
104
+ style={containerStyle}
105
+ onAdError={handleError}
106
+ onAdClick={handleClick}
107
+ onAdClose={handleClose}
108
+ onAdLayout={handleLayout}
79
109
  />
80
110
  );
81
111
  };
82
112
 
83
- export default React.memo(FeedAdView);
113
+ export default React.memo(FeedAdView, (prevProps, nextProps) => {
114
+ // Custom comparison function for React.memo
115
+ // Only re-render if visible changes or key props change
116
+ return (
117
+ prevProps.codeid === nextProps.codeid &&
118
+ prevProps.visible === nextProps.visible &&
119
+ prevProps.adWidth === nextProps.adWidth
120
+ );
121
+ });