我试图使用条件渲染(在这种特定情况下),这将允许我做出类似的东西:
<Image
source={{ uri: "https://images4.alphacoders.com/221/221716.jpg" }}
style={this.state.isLoaded ? styles.loaded : { display: "none" }}
onLoadEnd={() => {
console.log("test"), this.setState({ isLoaded: true });
}}
/>
主要问题是当使用display: none
样式时,React Native似乎无法使用其内部生命周期函数,因此不会调用onLoadEnd
。它没有记录任何内容。
在使用display
样式道具
答案 0 :(得分:6)
下次,如果你设置一个小吃来演示你的问题,那将是非常酷的。
这种模式对你有用......
<Image
source={{ uri: "https://images4.alphacoders.com/221/221716.jpg" }}
style={[{width: 0, height: 0,},
this.state.isLoaded && {width: 400, height: 400,}]}
resizeMode="contain"
onLoadEnd={() => {
this.setState({ isLoaded: true });
}}
/>
display: none
<Image
source={{ uri: "https://images4.alphacoders.com/221/221716.jpg" }}
style={[{width: 400, height: 400,},
!this.state.isLoaded && {display: 'none'}]}
resizeMode="contain"
onLoadEnd={() => {
this.setState({ isLoaded: true });
}}
/>
答案 1 :(得分:2)
<强> { transform: [{ scale: 0 }] }
强>
是一个很好的解决方案
关于生命周期/渲染的问题似乎是合法的
因为我实际上不能给出任何答案...
我最近尝试使用{ display: 'none' }
时遇到了一些奇怪的错误(将显示恢复为'flex'
时,某些子组件仍未呈现),或{ width: 0, height: 0 }
(返回'flex'
时布局没有恢复。)
毋庸置疑,通过某些方法避免渲染是常见的技巧(return enabled && <MyComponent {...}/>
)不是解决方案(安装和卸载组件需要大量计算以破坏动画帧速率)。
由于我希望在动画期间隐藏组件而不破坏帧率,我发现{ transform: [{ scale: 0 }] }
是最佳解决方案:
alignSelf: 'center'
仍然有效)。我的实现类似于
view.setNativeProps({ transform: [{ scale: 0 }]
答案 2 :(得分:0)
我尝试了各种方法,但最终样式:{高度:0,宽度:0,不透明度:0}对我有用。