javascript - 如何在项目之间的 React Flatlist 中呈现 AdMob 横幅?
问题描述
我有一个 React Native Flatlist,它只在其数据发生变化时重新渲染。
我给它以下数据(作为道具):
const posts = [
{
...post1Data
},
{
...post2Data
},
{
...post3Data
},
{
...post4Data
},
{
...post5Data
},
]
这是我的 FlatList 渲染项:
const renderItem = useCallback(({ item, index }) => {
const { id, userData, images, dimensions, text } = item;
return (
<View
onLayout={(event) => {
itemHeights.current[index] = event.nativeEvent.layout.height;
}}
>
<Card
id={id}
cached={false}
userData={userData}
images={images}
dimensions={dimensions}
text={text}
/>
</View>
);
}, []);
如何以 5% 的概率在 FlatList 数据之间添加 AdMob 广告,而不会跳过帖子数组中的任何数据?
我试过这个:
const renderItem = useCallback(({ item, index }) => {
const { id, userData, images, dimensions, text } = item;
if (Math.random() < 0.05) return <Ad ... />
return (
<View
onLayout={(event) => {
itemHeights.current[index] = event.nativeEvent.layout.height;
}}
>
<Card
id={id}
cached={false}
userData={userData}
images={images}
dimensions={dimensions}
text={text}
/>
</View>
);
}, []);
但这会导致两个问题:
- 数据中的某些项目被跳过(不返回)
- 当平面列表重新渲染时(因为它的一些道具发生了变化),广告可能会消失(有 95% 的机会)。
有任何想法吗?我应该像这样在 Card 组件的页脚中随机呈现广告吗?
const Card = memo ((props) => {
...
return (
<AuthorRow ... />
<Content ... />
<SocialRow ... /> {/* Interaction buttons */}
<AdRow />
)
}, (prevProps, nextProps) => { ... });
const AdRow = memo(() => {
return <Ad ... />
}, () => true);
我不太确定这个选项,它有效,但它可能违反 admob 规定(?)(因为我正在调整广告以适应我的卡片组件的布局)
我将不胜感激任何形式的指导/帮助。谢谢你。
解决方案
推荐阅读
- javascript - 无法解析模块“expo-font.js”
- jenkins - 我想在英国夏令时每周三早上 7 点在 Jenkins 工具中运行工作
- elasticsearch - 格式读取 ElasticSearch 日期
- visual-studio-code - vs code、sublime 或 atom 中的上下文相关语法高亮显示
- ms-access - 根据另一个表中的值更新一个表中的字段
- c# - 检查相同结构的最佳方法?
- ipad - 如何在 iPad 的 Edge 中启用/打开开发者/控制台窗口?
- java - Protobuf 映射类型 JSON 格式使用字符串文字“键”和“值”而不是实际值
- reactjs - 如何触发父母提交?
- jquery - 根据点击的项目获取 JSON 数据