hi正在尝试加载远程映像。onLoadStart正在命中,但onLoadEnd '未命中
<View style={{ paddingTop: 60, paddingBottom: 10 }}>
{this.state.loading ? (
<DotIndicator size={25} color={"white"} />
) : (
<Image
resizeMode={this.resizeMode}
style={[styles.imageStyle, this.tintStyle]}
onLoadStart={e => {
this.setState({ loading: true });
}}
onLoadEnd={e => this.setState({ loading: false })}
// defaultSource={NoProfile}
// loadingIndicatorSource={require("@images/profile_placeholder.png")}
source={this.userImageUri}
onError={error => {
this.tintStyle = { tintColor: "lightgray" };
this.resizeMode = "contain";
this.userImageUri = NoProfile;
}}
/>
)}
</View>
”
编辑1
命中 onLoadStart。也从未调用 onLoad
有没有人有一个线索。我是新的React。任何帮助是感激。感谢是前进
解决方案
由于Vignesh和hong提到图像永远不会在那里,所以它的loadEnd永远不会被调用。因此,而不是只加载图像或加载器,我加载了图像顶部的加载器。在这里发布这一点,因为它可能对某些人有用。再次感谢Vignesh和hong
<View
style={{
padding: 10,
width: WIDTH - 50,
height: WIDTH - 25,
alignSelf: "center"
}}
>
{this.state.loading ? (
<MaterialIndicator
size={50}
color={"red"}
style={{
marginTop: WIDTH / 2,
alignSelf: "center"
}}
/>
) : null}
<Image
resizeMode={this.resizeMode}
style={[styles.imageStyle, this.tintStyle]}
onLoadStart={e => {
this.setState({ loading: true });
}}
onLoad={e => {
this.setState({ loading: false });
}}
onLoadEnd={e => this.setState({ loading: false })}
// defaultSource={NoProfile}
// loadingIndicatorSource={require("@images/profile_placeholder.png")}
source={this.userImageUri}
onError={error => {
this.tintStyle = { tintColor: "lightgray" };
this.resizeMode = "contain";
this.userImageUri = NoProfile;
}}
/>
</View>
4条答案
按热度按时间bgibtngc1#
假设在第一次渲染之前,
this.state.loading
的值是false
。当第一次渲染发生时,
this.state.loading ?
返回Image
组件,onLoadStart
被触发,this.state.loading
被设置为true
。当第二次渲染发生时,
this.state.loading
被发现是true
,而this.state.loading ?
返回DotIndicator
组件。在上一次渲染中,Image
组件所做的所有努力都丢失了。事实上,Image
组件从未出现在该上下文中。因此,
onLoadingEnd
永远不会被触发,因为Image
组件从未出现在第二个渲染中。和
DotIndicator
将永远去轮和轮和轮...等待它失去的爱..f1tvaqid2#
如果
loading
从一开始就是true
,则在图像中不会调用任何内容。如果
loading
的值最初是false
,则图像不会看到loadStart
运行,只会调用load
函数和loadEnd
函数。这是因为
loadStart
函数在开始值为false
并且已经渲染时运行。如果开始值为true
,则什么也不做,因为它没有绘制图像。这是一个非常简单的例子,你可以尝试一下:
sg24os4d3#
我最终复制了相同的图像,但将其样式设置为width:1,height:1.这将始终显示但不可见。这允许的是继续设置状态,尽管有许多重新呈现。然后在if语句中有实际的图像或文本组件,将显示未找到的图像。默认情况下NoImageFound设置为true。下面是我的代码
yv5phkfx4#
我遇到了这个问题,因为我使用条件来渲染加载屏幕或图像。解决方案是只渲染加载屏幕,并始终返回图像。这里有一个简单的例子,我是如何解决的: