为什么 node.appendChild() 不起作用?
Why is node.appendChild() not working?
我有这段代码,稍后将用于在日历中显示日期。我正在尝试动态执行此操作,以便我可以加载当月的日期。我正在使用 reactjs,但我一直收到 appendChild 不是函数的错误。根据文档,我看不出这里有什么问题。 See documentation
let datesContainer = document.getElementById('display')
function drawCalendar() {
for (let i = 0; i < 42; i++) {
let dateNode = document.createElement("div")
dateNode.textContent = toString(i)
dateNode.setAttribute("id", "dateNode" + i)
datesContainer.appendChild(dateNode)
}
}
drawCalendar()
class App extends Component {
render() {
return (
<div className="App">
<div className="display">
<div className="d-numbers" id="display">
</div>
</div>
</div>
);
}
}
您在哪里使用了 tostring()
函数的错误方式。老实说,你根本不需要那个。 Javascript 自动执行。
let datesContainer = document.getElementById('display');
function drawCalendar() {
for (let i = 0; i < 42; i++) {
let dateNode = document.createElement("div");
dateNode.textContent = i;
dateNode.setAttribute("id", "dateNode" + i);
datesContainer.appendChild(dateNode);
}
}
drawCalendar();
<div id="display"></div>
这应该适合你:
class App extends Component {
makeCalendarDates = () => {
const dates = [];
for (let i = 0; i < 42; i++) {
const nodeId = `dateNode${i}`;
dates.push(<div id={nodeId} key={nodeId}>${i}</div>);
}
return dates;
}
render() {
return (
<div className="App">
<div className="display">
<div className="d-numbers" id="display">
{this.makeCalendarDates()}
</div>
</div>
</div>
);
}
}
我想这是 Reactjs 特有的事情,或者只是代码执行的时间安排。正如您在@MarkBaijens 的回答中看到的那样,代码在 vanilla js 中确实有效。 @Derek 引导我找到了将我的函数和 DOM 元素放在 componentDidMount()
方法中的解决方案。在反应中,用 DOM 节点初始化变量的地方在该方法内 see documentation.
class App extends Component {
componentDidMount() {
let datesContainer = document.getElementById('display')
function drawCalendar() {
for (let i = 0; i < 42; i++) {
let dateNode = document.createElement("div")
dateNode.textContent = i
dateNode.setAttribute("id", "dateNode" + i)
datesContainer.appendChild(dateNode)
}
}
drawCalendar()
}
render() {
return (
<div className="App">
<div className="display">
<div className="d-numbers" id="display">
</div>
</div>
</div>
);
}
}
我有这段代码,稍后将用于在日历中显示日期。我正在尝试动态执行此操作,以便我可以加载当月的日期。我正在使用 reactjs,但我一直收到 appendChild 不是函数的错误。根据文档,我看不出这里有什么问题。 See documentation
let datesContainer = document.getElementById('display')
function drawCalendar() {
for (let i = 0; i < 42; i++) {
let dateNode = document.createElement("div")
dateNode.textContent = toString(i)
dateNode.setAttribute("id", "dateNode" + i)
datesContainer.appendChild(dateNode)
}
}
drawCalendar()
class App extends Component {
render() {
return (
<div className="App">
<div className="display">
<div className="d-numbers" id="display">
</div>
</div>
</div>
);
}
}
您在哪里使用了 tostring()
函数的错误方式。老实说,你根本不需要那个。 Javascript 自动执行。
let datesContainer = document.getElementById('display');
function drawCalendar() {
for (let i = 0; i < 42; i++) {
let dateNode = document.createElement("div");
dateNode.textContent = i;
dateNode.setAttribute("id", "dateNode" + i);
datesContainer.appendChild(dateNode);
}
}
drawCalendar();
<div id="display"></div>
这应该适合你:
class App extends Component {
makeCalendarDates = () => {
const dates = [];
for (let i = 0; i < 42; i++) {
const nodeId = `dateNode${i}`;
dates.push(<div id={nodeId} key={nodeId}>${i}</div>);
}
return dates;
}
render() {
return (
<div className="App">
<div className="display">
<div className="d-numbers" id="display">
{this.makeCalendarDates()}
</div>
</div>
</div>
);
}
}
我想这是 Reactjs 特有的事情,或者只是代码执行的时间安排。正如您在@MarkBaijens 的回答中看到的那样,代码在 vanilla js 中确实有效。 @Derek 引导我找到了将我的函数和 DOM 元素放在 componentDidMount()
方法中的解决方案。在反应中,用 DOM 节点初始化变量的地方在该方法内 see documentation.
class App extends Component {
componentDidMount() {
let datesContainer = document.getElementById('display')
function drawCalendar() {
for (let i = 0; i < 42; i++) {
let dateNode = document.createElement("div")
dateNode.textContent = i
dateNode.setAttribute("id", "dateNode" + i)
datesContainer.appendChild(dateNode)
}
}
drawCalendar()
}
render() {
return (
<div className="App">
<div className="display">
<div className="d-numbers" id="display">
</div>
</div>
</div>
);
}
}