javascript - React useEffect() 正在重新渲染,但动态值未反映在屏幕上
问题描述
当我单击“+”号时,我需要增加状态的值。即使 useEffect 正在运行,但状态的更改值不会更新屏幕上的文本。
初始状态:
const italianMenu = [
{
name: "White Sauce Pasta",
price: "$15",
type: "veg",
qty: 0,
itemId: "italian-1"
},
{
name: "Red Sauce Pasta",
price: "$15",
type: "veg",
qty: 0,
itemId: "italian-2"
}
]
这是功能组件:
const CheckForms = () => {
const [italian, editItalian] = useState(italianMenu);
const addMore = (e) => {
const updatedMenu = italian.map( each => {
if(each.itemId === e.target.id) {
return {
...each, qty: each.qty + 1
}
}
else {
return each;
}
});
editItalian(updatedMenu);
}
const addLess = (e) => {
}
useEffect(() => {
console.log(italian) // output is perfect on console.log everytime
}, [italian]);
return (
<div className="container CheckForms">
<h1 className="header">Our Menu</h1>
<hr />
<h3 className="category">Italian</h3>
{ italianMenu.map((each) => {
return (
<FormCheck className="m-1">
<div className="row justify-content-center">
<div className="col-6">
<FormCheckInput type="checkbox" id="checkbox"/>
<FormCheckLabel className="" >{each.name}</FormCheckLabel>
</div>
<div className="col-2">
<FormCheckLabel className="" >{each.type}</FormCheckLabel>
</div>
<div className="col-2">
<FormCheckLabel className="" >{each.price}</FormCheckLabel>
</div>
<div className="col-2">
<div className="row">
<div className="col-4"><span name={each.itemId}>-</span></div>
<div className="col-4"><FormCheckLabel className="" >{each.qty}</FormCheckLabel></div>
/********************************************
* NOT UPDATING ABOVE ^^^
********************************************/
<div className="col-4"><span id={each.itemId} onClick={addMore}>+</span></div>
</div>
</div>
</div>
</FormCheck>
)
}) }
</div>
)
}
我想知道有什么问题。 当我单击 PLUS 跨度时,它会重新运行 useEffect 并且它也会更改状态,但它不会反映在 html 上
请帮忙。
解决方案
You should map using state(italian not italianMenu) like:
{ italian.map((each) => {
return (
<FormCheck className="m-1">
<div className="row justify-content-center">
<div className="col-6">
<FormCheckInput type="checkbox" id="checkbox"/>
<FormCheckLabel className="" >{each.name}</FormCheckLabel>
</div>
<div className="col-2">
<FormCheckLabel className="" >{each.type}</FormCheckLabel>
</div>
<div className="col-2">
<FormCheckLabel className="" >{each.price}</FormCheckLabel>
</div>
<div className="col-2">
<div className="row">
<div className="col-4"><span name={each.itemId}>-</span></div>
<div className="col-4"><FormCheckLabel className="" >{each.qty}</FormCheckLabel></div>
/********************************************
* NOT UPDATING ABOVE ^^^
********************************************/
<div className="col-4"><span id={each.itemId} onClick={addMore}>+</span></div>
</div>
</div>
</div>
</FormCheck>
)
}) }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
推荐阅读
- javascript - 在 onchange 事件上添加变量值
- python - 如何在python docx中垂直写表
- c++ - 学习openCV,获取LNK2019(未解析的外部符号)
- kubernetes - 部署 YAML 文件时出现 Kubernetes 错误
- laravel - laravel 5.6 将散列密码转换为普通密码?
- saml-2.0 - CAS 6.1.3 SAML 问题
- python - 如何从 Python 的父目录中的包中导入模块?
- reactjs - 尝试在 Firebase 上实现云功能,但未定义变量出现错误
- python - 将excel公式保存在DataFrame中,然后写入excel
- spring-boot - Spring Boot 调用存储过程的设计方法