我正在使用 Firebase 文档(react+redux+firebase)中的 create-react-app 创建类似于汽车图片库的东西。图像信息存储在 Firebase 实时数据库中,但实际的图像文件存储在 Firebase 存储中。在 componentWillMount 中,我调用了一个动作创建者来获取这些图像:
this.props.fetchCars();
在动作创建器中,此函数执行:
export function fetchCars() {
return (dispatch, getState) => {
carsRef.on('value', snapshot => {
dispatch({
type: FETCH_CARS,
payload: snapshot.val()
});
});
};
}
该调度转到我的减速器并相应地更新状态。我的状态如下所示:
{
cars: {
make: "Toyota",
model: "Vios",
year: 2015,
fileName: "cars1.jpg",
fileFullPath: ""
}
}
获取后,图像的完整 URL 未知(fileFullPath),因为 fileName 只是用户上传的文件名。所以我必须使用 Firebase Storage 来获取可下载的 Url,这样我就可以把它放在一个<img />
标签中:
export function getFileFullPath(){
return (dispatch, getState) => {
var newState = Object.assign({}, getState());
var imgRef, carUrl;
_.map(newState.cars, (car, index) => {
imgRef = storageRef.child('images/'+car.img);
carUrl = imgRef.getDownloadURL().then( url => {
car.fileFullPath=url;
});
});
dispatch({
type: FILL_UP_URL,
payload: newState.cars
});
};
}
但是,当我运行它时,它不起作用。第一次调度后,图像列表已从实时数据库中正确检索到,文件全路径为空。第二次发货后,它仍然是空的。我想我这样做的方式有问题,但我不知道该怎么做。