@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.
- package/lib/commonjs/dy/component/BannerAd.js +58 -29
- package/lib/commonjs/dy/component/BannerAd.js.map +1 -1
- package/lib/commonjs/dy/component/DrawFeedAd.js +26 -19
- package/lib/commonjs/dy/component/DrawFeedAd.js.map +1 -1
- package/lib/commonjs/dy/component/FeedAd.js +49 -22
- package/lib/commonjs/dy/component/FeedAd.js.map +1 -1
- package/lib/module/dy/component/BannerAd.js +59 -30
- package/lib/module/dy/component/BannerAd.js.map +1 -1
- package/lib/module/dy/component/DrawFeedAd.js +25 -18
- package/lib/module/dy/component/DrawFeedAd.js.map +1 -1
- package/lib/module/dy/component/FeedAd.js +50 -23
- package/lib/module/dy/component/FeedAd.js.map +1 -1
- package/lib/typescript/src/dy/component/BannerAd.d.ts.map +1 -1
- package/lib/typescript/src/dy/component/DrawFeedAd.d.ts.map +1 -1
- package/lib/typescript/src/dy/component/FeedAd.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/dy/component/BannerAd.tsx +69 -26
- package/src/dy/component/DrawFeedAd.tsx +30 -16
- package/src/dy/component/FeedAd.tsx +57 -19
|
@@ -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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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","
|
|
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 =
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
-
function
|
|
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 =
|
|
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:
|
|
48
|
-
|
|
49
|
-
|
|
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","
|
|
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":"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","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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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","
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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","
|
|
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 =
|
|
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:
|
|
39
|
-
|
|
40
|
-
|
|
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","
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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","
|
|
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,
|
|
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,
|
|
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,
|
|
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,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={
|
|
72
|
-
onAdError={
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
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 =
|
|
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={
|
|
67
|
-
|
|
68
|
-
|
|
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={
|
|
63
|
-
onAdError={
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
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
|
+
});
|