javascript 中 html 内的循环函数(React)
Loop function inside html in javascript (React)
我想在 Html 中使用不同的输入循环我的函数 SliderComponent 以创建多个组件。
我在网上找到了这个解决方案,我们使用“id”和“getElementById”将字符串和 return 构建为 Html,但我无法使其工作。
export function GrommetButtonEx() {
return (
<div>
<Grommet theme={grommetTheme}>
<Sidebar
border={{ color: "grey", size: "medium" }}
width="340px"
background={{ color: "black", opacity: "strong" }}
style={{ borderRadius: "15px" }}
>
<Accordion style={{ color: "grey" }}>
<AccordionPanel
style={{ height: "30px" }}
label={
<Text color="white" weight="bold" size="small">
Joint Position
</Text>
}
>
<div id="output_div"></div>
{/* This works
<SliderComponent
sliderName={"slider 5"}
min={0}
max={17}
step={0.1}
/>
*/}
</AccordionPanel>
</Accordion>
</Sidebar>
</Grommet>
</div>
);
}
window.onload = function () {
var outputHTML = "";
for (var k = 0; k < 5; k++) {
outputHTML +=
'<SliderComponent sliderName={"slider ' +
k +
'"} min={0} max={17} step={0.1}';
}
document.getElementById("output_div").innerHTML = outputHTML;
};
我收到以下错误:
TypeError: Cannot set properties of null (setting 'innerHTML')
在:
document.getElementById("output_div").innerHTML = outputHTML;
这是正确的方法吗,还是有更好的方法?
您应该使用 componentDidMount
钩子而不是 onload
。
componentDidMount() 在安装组件(插入到树中)后立即调用。需要 DOM 个节点的初始化应该放在这里(就像你的情况一样)。
在此处阅读有关 componentDidMount
的更多信息 - https://reactjs.org/docs/react-component.html#componentdidmount
在 React 中,你可以在“HTML”(这称为 JSX)中写入 Javascript。您不必在函数组件之外编写任何 Javascript 逻辑。
此外,您不必使用 innerHTML,而是必须使用 JSX(在 HTML 内部)编写,并使其成为 return 的实例每次循环运行的组件。
要替换 "onload"
,您可以使用名为 componentDidMount 的挂钩。
关于如何在JSX(HTML里面)写循环逻辑的问题,here is a link to a similar question.
我想在 Html 中使用不同的输入循环我的函数 SliderComponent 以创建多个组件。 我在网上找到了这个解决方案,我们使用“id”和“getElementById”将字符串和 return 构建为 Html,但我无法使其工作。
export function GrommetButtonEx() {
return (
<div>
<Grommet theme={grommetTheme}>
<Sidebar
border={{ color: "grey", size: "medium" }}
width="340px"
background={{ color: "black", opacity: "strong" }}
style={{ borderRadius: "15px" }}
>
<Accordion style={{ color: "grey" }}>
<AccordionPanel
style={{ height: "30px" }}
label={
<Text color="white" weight="bold" size="small">
Joint Position
</Text>
}
>
<div id="output_div"></div>
{/* This works
<SliderComponent
sliderName={"slider 5"}
min={0}
max={17}
step={0.1}
/>
*/}
</AccordionPanel>
</Accordion>
</Sidebar>
</Grommet>
</div>
);
}
window.onload = function () {
var outputHTML = "";
for (var k = 0; k < 5; k++) {
outputHTML +=
'<SliderComponent sliderName={"slider ' +
k +
'"} min={0} max={17} step={0.1}';
}
document.getElementById("output_div").innerHTML = outputHTML;
};
我收到以下错误:
TypeError: Cannot set properties of null (setting 'innerHTML')
在:
document.getElementById("output_div").innerHTML = outputHTML;
这是正确的方法吗,还是有更好的方法?
您应该使用 componentDidMount
钩子而不是 onload
。
componentDidMount() 在安装组件(插入到树中)后立即调用。需要 DOM 个节点的初始化应该放在这里(就像你的情况一样)。
在此处阅读有关 componentDidMount
的更多信息 - https://reactjs.org/docs/react-component.html#componentdidmount
在 React 中,你可以在“HTML”(这称为 JSX)中写入 Javascript。您不必在函数组件之外编写任何 Javascript 逻辑。
此外,您不必使用 innerHTML,而是必须使用 JSX(在 HTML 内部)编写,并使其成为 return 的实例每次循环运行的组件。
要替换 "onload"
,您可以使用名为 componentDidMount 的挂钩。
关于如何在JSX(HTML里面)写循环逻辑的问题,here is a link to a similar question.