【问题标题】:document not defined for document.querySelector未为 document.querySelector 定义文档
【发布时间】:2020-05-27 03:38:31
【问题描述】:

我正在尝试将来自我的 firebase 后端的数据呈现到我的网站上。我在 ../components/Storefront.js 中有一个函数

function Storefront(props) {
return (
<section>
<ul className="service-list"></ul>
</section>
}

在另一个文件 ../pages/storefront.js 中,我正在尝试将一个函数呈现给“服务列表”,

import Storefront from './../components/Storefront';
const servicelist = document.querySelector('.service-list');

function renderServices(doc){
  let li = document.createElement('li');
  let name = document.createElement('span');
  let description = document.createElement('span');

  li.setAttribute('data-id', doc.id);
  name.textContent = doc.data().name;
  description.textContent = doc.data().description;

  li.appendChild(name);
  li.appendChild(description);

  servicelist.appendChild(li);
}

但是,我不断收到指向我的文档未定义错误

const servicelist = document.querySelector('.service-list');

我尝试过 ('#service-list') 没有帮助。这是因为 querySelector 不适用于 JSX 而只能用于 HTML?任何建议将不胜感激!

【问题讨论】:

  • 我认为您的代码可能在加载 DOM 之前运行得太早。尝试在 DOM 加载后使用window.onload 调用函数。
  • 我应该在函数 Storefront 的开头添加它吗?还是单独在 pages/storefront.js 中?
  • 我添加了一个答案,因为在 cmets 中很难编写代码。

标签: html reactjs jsx


【解决方案1】:

我认为问题在于您的 const servicelist = document.querySelector... 行在文件范围内,这意味着它在文件加载时立即运行,这还为时过早,因为 DOM 尚未加载。尝试像这样更改代码的第一部分。

import Storefront from './../components/Storefront';
let servicelist;

function init() {
    console.log("Initializing");
    servicelist = document.querySelector('.service-list');
    // anything else you want to do on initialize
}

window.onload = init;

// The rest as you have it already.

这是一个很好的介绍:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload

【讨论】:

  • 在尝试使用 window.onload 时出现“未定义窗口”错误。知道为什么吗?
  • 哦!我想我误解了你的情况。此代码仅适用于浏览器,不适用于服务器。 JSX 和documentwindow 是纯粹的浏览器端结构。恐怕没有一个简单的补丁可以制作。您应该阅读有关制作 JSX webapp (reactjs.org/docs/introducing-jsx.html) 并让它与您的服务器对话以获取数据的信息。或者,让您的服务器为浏览器发出纯 HTML 和 JS,但不要试图让服务器实际上 invoke JS 本身。
猜你喜欢
  • 2021-02-03
  • 1970-01-01
  • 2022-01-06
  • 2016-05-06
  • 2020-10-26
  • 2015-11-14
  • 2019-11-28
相关资源
最近更新 更多