我的用户提供了一个URL,我想在我的React+Redux应用程序中使用该URL作为<canvas>
元素的背景。这意味着我的React组件的render()
方法需要访问包含用户图像的<img>
DOM节点。不幸的是,设置图像标记的src
属性是异步的,因为所请求的图像在从服务器获取数据之前实际上不会填充到DOM中。
对于异步任务,例如API调用,通常会将异步任务的结果直接存储到Redux存储中,但从阅读Redux文档来看,似乎不建议在存储中存储不可序列化的对象(如DOM节点)。
有其他合理的方法来解决这个问题吗?目前,我滥用React组件的生命周期方法来监视URL prop的变化,然后将<img>
DOM节点异步设置为组件的状态,这感觉非常尴尬。
为什么不将图像URL存储在store/state中,然后将其传递给Image
构造函数?
假设state
中有url
:
render() {
var bg = new Image()
bg.src = this.state.url
// here you use the bg as an <img> element
}
这样你就不用把它设置为回调,而是作为对状态变化的反应。