React native 如何在react native中可用时渲染新图像

React native 如何在react native中可用时渲染新图像,react-native,React Native,我的RN应用程序现在遇到了一个问题,我不知道如何解决它。 我通过Facebook API登录用户,在我们的后端,我们处理所有FB用户数据,以及出于性能目的裁剪到一定大小的个人资料图片。 为此,我们运行一个异步工作程序来进行裁剪,同时,在应用程序中,我们显示一个带有应用程序徽标的默认用户化身。但是,一旦工作人员完成任务,图像不会更新,直到我重新渲染视图,此重新渲染会导致再次运行“renderUserAvatar()”函数,该函数验证用户是否具有配置文件图片。这是有道理的 下面是帮助,我如何收听此U

我的RN应用程序现在遇到了一个问题,我不知道如何解决它。 我通过Facebook API登录用户,在我们的后端,我们处理所有FB用户数据,以及出于性能目的裁剪到一定大小的个人资料图片。 为此,我们运行一个异步工作程序来进行裁剪,同时,在应用程序中,我们显示一个带有应用程序徽标的默认用户化身。但是,一旦工作人员完成任务,图像不会更新,直到我重新渲染视图,此重新渲染会导致再次运行“renderUserAvatar()”函数,该函数验证用户是否具有配置文件图片。这是有道理的

下面是帮助,我如何收听此URL可用性?因此,每当图像可用时,它都会重新渲染

起初,我考虑添加一些东西,比如通过设置setInterval来处理图像的onError,并尝试强制重新渲染,但这看起来性能不太好,听起来很难看

有没有一个干净的方法来处理这个特定的案例场景

这是我当前的renderUserAvatar函数:

    renderUserAvatar() {
        const { userInfo } = this.props;
        if (!_.isEmpty(userInfo) && userInfo.userPictures && userInfo.userPictures.length) {
            const avatar = userInfo.userPictures.filter(pic => pic.isAvatar && pic.isEnabled);

            if (avatar && avatar.length) {
                const url = `${avatar[0].url}?height=${USER_AVATAR_HEIGHT}&width=${USER_AVATAR_WIDTH}`;
                return <Thumbnail large style={ styles.userProfilePic } source={{uri: url}}/>;
            }
        }

        return <Thumbnail large style={ styles.userProfilePic } source={ImageAssets['user-avatar']}/>
    }
renderUserAvatar(){
const{userInfo}=this.props;
if(!.isEmpty(userInfo)和&userInfo.userPictures和&userInfo.userPictures.length){
const avatar=userInfo.userPictures.filter(pic=>pic.isAvatar&&pic.isEnabled);
if(化身和化身长度){
常量url=`${avatar[0].url}?高度=${USER\u avatar\u height}&width=${USER\u avatar\u width}`;
返回;
}
}
返回
}

(缩略图是一个基于React Native Image的NativeBase组件。因此它也包含所有图像方法和道具)

您可以将图像放入状态变量。 在第一次加载时(或者如果尚未获取用户图像),它是您的占位符图像

如果异步函数在进入屏幕时运行,并且已获取图像,请使用新图像替换处于该状态的占位符图像


状态变量的更改将导致重新渲染,这样,您的图像就会出现。

问题是,此异步工作程序在后端运行,而不是在前端。所以我没办法知道工人什么时候完工。除非我使用onLoad、onError、onLoadEnd回调。这能起作用吗?谢谢回复顺便说一句!什么是后端?好像你把一些东西弄混了?!RN应用程序有一个状态。您在何处获取数据一点都不重要。如果收到数据,并且您使用收到的数据更改了状态,则状态将更改,屏幕将重新呈现。对不起,我不明白,如果你谈论onLoad、onError之类的东西,你的确切意思是什么。我可能没有正确地解释情况。如果我没有直接调用后端来检索图像,如何更改状态?它只是缩略图组件中的一个sourceURI。我不会为此调用任何端点。我理解你所说的改变状态以强制重新渲染,我完全同意,这是唯一的方法,但我什么时候改变状态?基于什么?创建图像时我没有任何回调,因此设置为userInfo以实际触发重新渲染。onLoad、onLoadEnd和onError是图像/缩略图回调道具。我可以试着解决这个问题。啊,好吧,也许我现在明白你的意思了。那么,你为什么不让你的生活变得简单,直接在你的设备中使用裁剪功能:?你试过使用悬念组件吗?不,我从来没有用过悬念。你有任何应用于图像的例子吗?你是说像懒虫一样?