Javascript Firebase下载URL随React.js render()中的变量消失
在html的一部分中,我返回React render函数。“故事”(从呈现前的状态中检索值)包含js对象,其属性包括“url”等。单独记录整个对象和其他属性时,它们会显示在控制台上,但“url”属性不会显示。该url包含图像的firebase下载url,当我获取该url以将其加载到状态时,它存在于渲染函数之外。但在进入render()后消失。这是render()中的一个片段Javascript Firebase下载URL随React.js render()中的变量消失,javascript,reactjs,firebase,firebase-storage,render,Javascript,Reactjs,Firebase,Firebase Storage,Render,在html的一部分中,我返回React render函数。“故事”(从呈现前的状态中检索值)包含js对象,其属性包括“url”等。单独记录整个对象和其他属性时,它们会显示在控制台上,但“url”属性不会显示。该url包含图像的firebase下载url,当我获取该url以将其加载到状态时,它存在于渲染函数之外。但在进入render()后消失。这是render()中的一个片段 {stories.map((story,idx)=>{ console.log(故事); log(JSON.string
{stories.map((story,idx)=>{
console.log(故事);
log(JSON.stringify(story));
log(story.url);
返回(
{story.image!=null?
: ""
}
{story.khronos==null?
"" : (
{story.khronos}
)
}
{story.title}
{story.text}
)
})}
控制台中的输出如下所示:
因此,对象将“url”属性显示为对象,而不是字符串。单独访问时,“url”未定义。我不知道发生了什么事。结果我得到了图像的另一个视图。提前感谢。因为
JSON.stringify
没有显示url
,这意味着该值/属性是在您最初记录对象之后添加的,Chrome的控制台只是用新属性更新记录的对象
最有可能的是
url
是从某个地方异步加载的,但是我们不能说这是基于您共享的代码的。不管怎样,解决方案都是一样的:当你在stories
对象中设置一个故事的url
时,你还需要在你的应用程序的状态下更新stories
对象,这样你就知道它需要更新该对象的用户界面。你能console.log吗(JSON.stringify(story))
并将更新后的代码及其输出包含在问题中?@FrankvanPuffelen对其进行了更新。它将其更改为字符串。url已消失。是否可从stories[idx]访问它.url?@TechySharnav是的,这也不起作用。谢谢!在完成更新循环后,我只在最后更新了一次状态!吸取了教训。嗨,弗兰克,我也在处理同样的问题。我正在获取下载的url,通过调度将其传递给状态。我的组件重新渲染,图像的容器出现了rs但图像没有。事实上,当我尝试手动复制上传图像的下载URL并在图像组件中使用它时(在React Native中),图像不会再次显示。如果您能提供帮助,我将非常感激。我将在回答中共享代码:)
<div className="Storysubmain">
{stories.map((story, idx) => {
console.log(story);
console.log(JSON.stringify(story));
console.log(story.url);
return (
<div className="story" key={idx}>
{story.image != null ?
<div className="storyimagebox">
<a rel='noopener noreferrer' target='_blank' href={story.link}>
<img src={story.url} alt='Related view' />
</a>
</div>
: ""
}
<div className="storydetails">
{story.khronos == null ?
"" : (
<span className="storykhronos">{story.khronos}</span>
)
}
<span className="storytitle">{story.title}</span>
<p>{story.text}</p>
</div>
</div>
)
})}
</div>
</div>