如何防止 map() 在 react-native 中一次渲染整个数组
How to prevent map() from render whole array at once in react-native
大家好,我正在使用 viewPager
,在 viewpager 中,我正在使用地图渲染视频数组。但是我想一次显示 1 个视频,因为我将高度和宽度设置为 100%。但是,当我 运行 应用程序时,所有视频都开始 playing.Only 在屏幕上显示一个,其他视频的声音也在播放。我想阻止这种情况。我该怎么做?
这是我的代码。
<ViewPager
onPageSelected={(e) => {
setActive(e.nativeEvent.position);
// setPaused(true);
}}
orientation="vertical"
style={{height: '100%'}}
initialPage={0}>
{vids.map((item,index) => {
return (
<View key={index}>
<Video
paused={item.paused}
source={{uri: item.vid}}
style={styles.mediaPlayer}
volume={0.5}
resizeMode="cover"
repeat={true}
onReadyForDisplay={() => SetVideoLoad(false)}
/></ViewPager
问题在于您使用地图的方式。
vids.map((item,index) => {
return (
<View key={index}>
....
<View /> ) ..
将遍历地图的所有元素并显示它们各自的视频。您需要的是创建一个状态变量之类的东西,它只包含地图中一个视频的信息,并将其信息传递给 组件。您将需要有其他反应组件,例如按钮,以移动到地图的另一个元素以播放另一个视频。每次单击此“按钮”时,您将执行一些代码以获取地图的另一个元素并播放相应的视频。
您可以通过以下方式简单地完成此操作
const [pause,setPause]= useState(true)
<Video
paused={pause}
source={{uri: item.vid}}
style={styles.mediaPlayer}
volume={0.5}
resizeMode="cover"
repeat={true}
onTouchStart={()=>{setPause(!pause)} //<=== Add this line
onReadyForDisplay={() => SetVideoLoad(false)}
/>
我希望这会有所帮助 you.Happy 编码 :D
大家好,我正在使用 viewPager
,在 viewpager 中,我正在使用地图渲染视频数组。但是我想一次显示 1 个视频,因为我将高度和宽度设置为 100%。但是,当我 运行 应用程序时,所有视频都开始 playing.Only 在屏幕上显示一个,其他视频的声音也在播放。我想阻止这种情况。我该怎么做?
这是我的代码。
<ViewPager
onPageSelected={(e) => {
setActive(e.nativeEvent.position);
// setPaused(true);
}}
orientation="vertical"
style={{height: '100%'}}
initialPage={0}>
{vids.map((item,index) => {
return (
<View key={index}>
<Video
paused={item.paused}
source={{uri: item.vid}}
style={styles.mediaPlayer}
volume={0.5}
resizeMode="cover"
repeat={true}
onReadyForDisplay={() => SetVideoLoad(false)}
/></ViewPager
问题在于您使用地图的方式。
vids.map((item,index) => {
return (
<View key={index}>
....
<View /> ) ..
将遍历地图的所有元素并显示它们各自的视频。您需要的是创建一个状态变量之类的东西,它只包含地图中一个视频的信息,并将其信息传递给 组件。您将需要有其他反应组件,例如按钮,以移动到地图的另一个元素以播放另一个视频。每次单击此“按钮”时,您将执行一些代码以获取地图的另一个元素并播放相应的视频。
您可以通过以下方式简单地完成此操作
const [pause,setPause]= useState(true)
<Video
paused={pause}
source={{uri: item.vid}}
style={styles.mediaPlayer}
volume={0.5}
resizeMode="cover"
repeat={true}
onTouchStart={()=>{setPause(!pause)} //<=== Add this line
onReadyForDisplay={() => SetVideoLoad(false)}
/>
我希望这会有所帮助 you.Happy 编码 :D