javascript - 状态未使用 useState 设置方法更新
问题描述
我正在尝试学习钩子并尝试使用 onMouseEnter 和 Leave 事件更新状态,但状态isFlip.flipStat
不会改变,它用于使用 ReactCardFlip 组件翻转卡片的标志。这里唯一的问题是当handleMouse函数触发时我的状态没有改变,也许任何人都可以提供帮助。提前致谢。
这是我的代码:
function OurServices() {
const [isFlip, setFlip] = useState([])
const listServices = [
{
"title": "title",
"img": "img.jpg",
"desc": "lorem ipsum"
}
]
function handleMouse(key) {
let newArr = [...isFlip]
newArr[key].flipStat = !newArr[key].flipStat
setFlip(newArr)
}
useEffect(() => {
listServices.map((x) => (
x.flipStat = false
))
setFlip(listServices)
})
return (
{isFlip.map((x, key) => (
<div key={key} onMouseEnter={() => handleMouse(key)} onMouseLeave={() => handleMouse(key)}>
<div className={styles.card} >
<div className={styles.card_body+" p-xl-0 p-lg-0 p-md-1 p-sm-1 p-0"}>
<ReactCardFlip isFlipped={x.flipStat} flipDirection="horizontal">
<div className="row">
<div className={"col-xl-12 text-center "+styles.services_ic}>
<img className="img-fluid" src={x.img} width="72" height="72" alt="data-science" />
</div>
<div className={"col-xl-11 mx-auto text-center mt-4 "+styles.services_desc}>{x.title}</div>
</div>
<div className="row">
<div className={"col-xl-12 text-center "+styles.services_ic}>
{parse(x.desc)}
</div>
</div>
</ReactCardFlip>
</div>
</div>
</div>
))}
)```
解决方案
第一个问题出在你的 useEffect 中,
useEffect(() => {
listServices.map((x) => (
x.flipStat = false
))
setFlip(listServices)
})
您设置listServices
为 isFlip 数组。但是 Array.map() 方法不会更新源数组。你需要这样写,
useEffect(() => {
const updatedArr = listServices.map((x) => (
x.flipStat = false
return x;
))
setFlip(updatedArr)
})
您可以在这一行之后记录 newArrlet newArr = [...isFlip]
并查看该数组是否包含所有项目吗?它应该可以帮助您调试问题。
更新: 尝试在设置状态时创建新数组,
function handleMouse(key) {
let newArr = [...isFlip]
newArr[key].flipStat = !isFlip[key].flipStat
setFlip([...newArr])
}
推荐阅读
- apache-nifi - 将 SQL 脚本插入 PutSQL 处理器
- fastreport - Master data together with detail data
- swift - SwiftUI:如何在函数计算 @State 值时同时更新视图?
- php - 我如何在刀片输入中默认粘贴日期
- sql - 获取具有不同类型的 id 值的员工列表作为输出中的列名
- c - 如何删除字符串中的第 n 个词?
- android - Android:如何使 ImageButton 在 GridLayout 中具有相同的空间?
- reactjs - React.js 上的 no-undef 问题
- javascript - 我正在尝试解决的初学者 Javascript 函数问题
- javascript - 故事书 6 - 如何设置对象数组?