gpt4 book ai didi

javascript - React 组件不会显示函数的返回

转载 作者:行者123 更新时间:2023-11-30 14:06:32 25 4
gpt4 key购买 nike

我有一个组件应该显示一个“卡片”,其中包含保存在状态数组中的信息。我从一个 JSON 文件中获取此信息并将其保存到我的数组中的“componentDidMount”中。然后我在我的渲染函数返回之前创建了一个名为“displayFood”的函数,然后我在我的渲染函数返回中使用它。问题是当我运行代码时没有显示卡片。

import React from 'react'
import "./style.scss";
import FoodData from "./foodData.json";

class Food extends React.Component {
constructor(props){
super(props);
this.state={
foodData: []
}
}

componentDidMount(){
FoodData.map((foodItem,index) => {
var foodTemp = {
id: index,
name: foodItem.name,
pic: foodItem.pic,
serving: foodItem.serving,
calories: foodItem.calories,
sugar: foodItem.sugar,
protien: foodItem.protien
}
this.setState((prevState) => {
prevState.foodData.push(foodTemp)
})
})
}

render() {

const displayFood = () => {
var i;
for(i = 0; i < this.state.foodData.length; i++){
return(
<div className="food-card">
<img src={require(`${this.state.foodData[i].pic}`)}/>
<ul>
<li>{this.state.foodData[i].name}</li>
<li>Serving: {this.state.foodData[i].serving}</li>
<li>Calories: {this.state.foodData[i].calories}</li>
<li>Sugar: {this.state.foodData[i].sugar}</li>
<li>Protien: {this.state.foodData[i].protien}</li>
</ul>
<button name={this.state.foodData[i].name}>Add</button>
</div>
)
}
}

return(
<div>
<div className="food-container">
{
displayFood()
}
</div>
</div>
)
}
}

export default Food;

最佳答案

首先,我不确定您在componentDidMount 中的setState 是否有效。如果你不想返回一个新的数组,你不应该使用 map,而是使用 forEach。而且你正在直接改变状态,这是不推荐的。该函数应如下所示:

componentDidMount(){
// Build a new array of object from FoodData
const newFoodData =
FoodData.map(({name, pic, serving, calories, sugar, protien }, index) =>
({ id: index, name, pic, serving, calories, sugar, protien }))
// Assign the new object to state
this.setState({ foodData: newFoodData })
}

其次,for 循环中的return 将只返回第一项。您应该创建一个数组,然后将项目插入循环而不是返回

const displayFood = () => {
let cards = [] // Crate an array
for(let i = 0; i < this.state.foodData.length; i++){
cards.push( // push item to array through the loop
<div className="food-card">
<img src={require(`${this.state.foodData[i].pic}`)}/>
<ul>
<li>{this.state.foodData[i].name}</li>
<li>Serving: {this.state.foodData[i].serving}</li>
<li>Calories: {this.state.foodData[i].calories}</li>
<li>Sugar: {this.state.foodData[i].sugar}</li>
<li>Protien: {this.state.foodData[i].protien}</li>
</ul>
<button name={this.state.foodData[i].name}>Add</button>
</div>
)
}
return cards // Return the array
}

我建议您将 displayFood 移到 render() 函数之外。因为当其他事情导致重新渲染而不是 this.state.foodData 更改时,组件必须重新构建 displayFood()。那是浪费了。

关于javascript - React 组件不会显示函数的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55272582/

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