Firebase 下载 URL 与 React.js render() 中的变量一起消失

IT技术 javascript reactjs firebase firebase-storage render
2021-05-10 12:43:04

在 html 的一部分中,我在 React 渲染函数中返回。“故事”(在渲染之前从状态中检索值)包含具有“url”等属性的 js 对象。单独记录整个对象和其他属性时,它们会出现在控制台上,但“url”属性不会。该 url 包含图像的 firebase 下载 url,当我获取它以将其加载到状态时,它存在于渲染函数之外。但是在我进入 render() 后就消失了。这是render() 中的一个片段。

     <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>

控制台输出如下:

在此处输入图片说明

因此,该对象将“url”属性显示为一个对象,而不是一个字符串。“url”在单独访问时未定义。我不知道发生了什么。结果我得到了图像的替代视图。提前致谢。

1个回答

由于JSON.stringify没有显示url这意味着该值/属性是在您最初记录对象后添加的,而 Chrome 的控制台只是使用新属性更新记录的对象。

很可能url是从某个地方异步加载的,但我们无法根据您共享的代码确定它的位置。无论如何都没有关系,因为无论发生在哪里,解决方案都是一样的:当您urlstories对象中设置故事时,您还需要更新stories应用程序状态中对象,以便 React 知道它需要更新该对象的 UI。