如何显示 base64 图像 - React Native



长话短说;
我从 API 获取团队 ID。当我获得我的团队 ID 时,我想向我的服务器发出一个 get-request,该服务器具有从数据库中获取 base64 的查询,然后在我获取字符串时显示它。

目前我正在使用一个函数来获取图像:

getLogo(teamid) {
axios.get('url' + teamid)
.then(res => return res.data);
}

这就是我的函数,这是我的图像组件。

<Image
source={{ uri: `data:image/png;base64,${this.getLogo(this.homeid)}`}}
style={{ height: 50, width: 50 }}
/>

这有错吗?我应该以不同的方式处理这个问题吗? 我知道我从端点获得的base64是正确的,因为我尝试了控制台.log结果并将其插入任何图像元素中并且它可以工作。

提前感谢!

您的getLogo函数是异步的,这意味着它不会直接返回图像的 base64 字符串 - 相反,它只是触发 HTTP 请求并退出,并且您的then处理程序在数据传入时履行响应承诺。然后,最好的办法是更新此组件的状态中的某些内容,并在视图中引用该内容。

所以你的HTTP调用会变成这样:

getLogo() {
axios.get('url' + this.homeid)
.then(res => this.setState({logo: res.data}));
}

(请注意,我已经删除了要传入 teamid 的参数,因为您似乎在组件上使用了一个设置变量this.homeid来驱动它)

然后,您可以将徽标渲染移动到它自己的功能:

renderLogo() {
let logoImage = null;
if (this.state.logo) {
logoImage = (
<Image
source={{ uri: `data:image/png;base64,${this.state.logo}`}}
style={{ height: 50, width: 50 }}
/>
);
}
return logoImage;
}

然后,您可以在您希望徽标在render中显示的任何位置引用{this.renderLogo}- 这样做意味着它不会显示任何内容,因为它将返回 null,直到 HTTP 调用返回,此时它将更新状态,触发重新渲染并显示徽标。如果要指示徽标正在加载,还可以使用某种类型的微调器或替代视图而不是 null。

您需要在某个时候调用getLogo来启动 HTTP 请求 - 一般来说,无论如何都不要在渲染循环中对数据发出额外的请求,这是一个好主意。

如果这是徽标数组的一部分,并且您需要为不同的团队 ID 多次调用它(这可能是您接受teamid作为参数的原因?),或者如果您打算为徽标添加任何其他复杂性或逻辑,我强烈建议将其移动到它自己的TeamLogo组件中, 可以将 id 作为 prop 传递,在组件初始化中进行 HTTP 调用,并根据上述状态更新相应地渲染 base64 图像。

希望对您有所帮助,任何进一步的问题都可以发表评论!

最新更新