React.useState点击状态切换异常:点击No无法切换回Yes,求排查
问题分析与修复
错误点
在changeState函数的状态更新逻辑中,你使用了赋值运算符=而非比较运算符===,导致状态切换逻辑失效:
return prevValue = "Yes" ? "No" : "Yes"
这段代码里,prevValue = "Yes"是把字符串"Yes"赋值给prevValue,赋值表达式的结果永远是"Yes",所以三元运算符会一直返回"No"——第一次点击后状态变成"No",后续点击时这个赋值操作依然会把prevValue强制设为"Yes",然后返回"No",自然无法切回"Yes"。
修复后的代码
把赋值运算符改成严格比较运算符===即可:
import React from "react" export default function App() { let [isGoingOut, setisGoingOut] = React.useState("Yes") function changeState(){ setisGoingOut(prevValue => { return prevValue === "Yes" ? "No" : "Yes" }) } return ( <div className="state"> <h1 className="state--title">Do I feel like going out tonight?</h1> <div className="state--value" onClick={changeState}> <h1>{isGoingOut}</h1> </div> </div> ) }
修复后,每次点击都会正确判断当前状态值,实现"Yes"和"No"的双向切换。
内容的提问来源于stack exchange,提问作者Adhil Bayya
相关产品推荐
相关产品推荐

