gpt4 book ai didi

javascript - 如何通过函数生成 HTML 并稍后在 JS React 中渲染它

转载 作者:行者123 更新时间:2023-12-02 21:15:03 34 4
gpt4 key购买 nike

我正在努力根据 this.periodicTable[] 中给出的信息生成 HTML 元素周期表并稍后渲染它,如下面的代码所示。我怎样才能让它发挥作用?首先我是手工制作的(全部在 HTML 编写的 render() 部分中),但后来我发现生成它会是更好的主意。一切正常,直到我切换到生成 html 而不是编写它。我还想在网站的其他部分使用periodicTable数据,所以这个是必要的

导入 React 东西

class PeriodicTable extends React.Component{
constructor(props){
super(props);
this.state = {
show: true,
};
this.periodicTable = [
// 1 row
this.hydrogen = {
blank: false,
name: "hydrogen",
short: "H",
z: 1,
mass: 1.006,
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank:true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.blank = {
blank: true
},
this.hellium = {
blank: false,
name: "hellium",
short: "He",
z: 2,
mass: 4.0026,
},
// 2 row
]
this.output = "";
}

generatePeriodicTable = () =>{
for(let i = 0; i < this.periodicTable.length; i++){
if(this.periodicTable[i].blank){
this.output += <div class = "periodicCard" class="blank"></div>;
}else{
this.output +=
<div class="periodicCard">
<sup class="periodicZ">{this.periodicTable[i].z}</sup>
<div class='center'>
<strong class="periodicElement">{this.periodicTable[i].short}</strong>
</div>
<div class='center'>
<p class="periodicMass">{this.periodicTable[i].mass}</p>
</div>
</div>;
}
}
return this.output;
}

showLearnItPage = () =>{
this.setState({show: false});
}

render(){
if(this.state.show){
return(
<div>
<h2>Periodic<sup class="sup">table</sup></h2>
<main class="biggrid">
{this.generatePeriodicTable}{this.output}
</main>
<div class='center'>
<button class='periodic-table-page-button' onClick={this.showLearnItPage}>Back</button>
</div>
</div>
);
}else{
return( <LearnItPage /> );
}
}
}

export default PeriodicTable;```

最佳答案

好的,所以我修复了您的代码,并且我将评论我所做的一切。

// periodicTable doesn't need to be part of the PeriodicTable Component, Juan Marco has made a good sugestion to stract it to a JSON
// for now I'll just put it in a variable outside PeriodicTable
const periodicTable = [
// 1 row
{
blank: false,
name: "hydrogen",
short: "H",
z: 1,
mass: 1.006,
},
{
blank: true
},
{
blank: true
},
{
blank:true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: true
},
{
blank: false,
name: "hellium",
short: "He",
z: 2,
mass: 4.0026,
},
// 2 row
];

// I've created a new Component that will handle the elements rendering, it's just a Function Component
function TableElement(props) {
const { elementData } = props;
const { blank, z, short, mass } = elementData;

if (blank) return <div className="periodicCard blank" />; // take note that in JSX files, HTML classes are className

return (
<div className="periodicCard">
<sup className="periodicZ">{z}</sup>
<div className='center'>
<strong className="periodicElement">{short}</strong>
</div>
<div className='center'>
<p className="periodicMass">{mass}</p>
</div>
</div>
);
}

class PeriodicTable extends React.Component {
constructor(props) {
super(props);

this.state = {
show: true,
};
}

// React knows how to handle arrays of ReactComponents, but you must put a key in each element of the array
generatePeriodicTable = () => {
return periodicTable.map((el, i) => <TableElement elementData={el} key={i} />);
}

showLearnItPage = () => {
this.setState({ show: false });
}

render() {
if(this.state.show) {
return (
<div>
<h2>Periodic<sup className="sup">table</sup></h2>
<main className="biggrid">
{this.generatePeriodicTable()}
</main>
<div className='center'>
<button className='periodic-table-page-button' onClick={this.showLearnItPage}>Back</button>
</div>
</div>
);
}
// after an if with a return you don't need to use else
return <LearnItPage />;
}
}

export default PeriodicTable;

现在一切都应该按您的预期进行。花一些时间阅读 React Tutorial .

关于javascript - 如何通过函数生成 HTML 并稍后在 JS React 中渲染它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60994564/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com