react函数式组件每次setstate内部变量重新赋值问题

react函数式组件每次setstate内部变量重新赋值问题

背景

react函数式组件每次setstate内部变量重新初始化赋值问题,导致不能够对变量正常赋值和读值。

bash 复制代码
const App: FC = ({ }) => {
  let a:string = '0'
  const [status, setStatus] = useState<string>('')
  console.log(a)
  return (
   <div 
    style={{
      width: '100px',
      height: '100px',
      background: 'red'
    }} 
    onClick={()=>{
      a = '1'
      setStatus('-')
    }}></div>
  )
}

这个时候首先依次打印的是 '0'、'0'因为当setStatus('-'')的时候,函数式组件会重新渲染内部,这样内部变量的声明也会再次执行,此时 a 又变成了 '0'。

解决办法

在函数外部声明此变量即可,这样就能够对变量正常赋值和读值了。

bash 复制代码
let a:string = '0'
const App: FC = ({ }) => {
  const [status, setStatus] = useState<string>('')
  console.log(a)
  return (
   <div 
    style={{
      width: '100px',
      height: '100px',
      background: 'red'
    }} 
    onClick={()=>{
      a = '1'
      setStatus('-')
    }}></div>
  )
}

如果需要再函数内部初始化值,可以现在外部声明变量,然后利用effect初始化值。

bash 复制代码
let a:string
const App: FC = ({ }) => {
  
  const [status, setStatus] = useState<string>('')
  useEffect(()=>{
    a = '0'
  },[])
  console.log(a)
  return (
   <div 
    style={{
      width: '100px',
      height: '100px',
      background: 'red'
    }} 
    onClick={()=>{
      a = '1'
      setStatus('-')
    }}></div>
  )
}
export default App;
相关推荐
小张快跑。几秒前
【Vue3】(三)vue3中的pinia状态管理、组件通信
前端·javascript·vue.js
我想说一句几秒前
当 map 遇上 parseInt:JS 中一场参数引发的“血案”
前端·javascript·面试
陈随易1 分钟前
2025年100个产品计划之第12个(杰森排序) - 对 JSON 属性进行排序
前端·后端·程序员
LeeAt1 分钟前
《谁杀死了比尔?》:使用Trae完成的一个推理游戏项目!!
前端·游戏开发·trae
三气归来3 分钟前
2. 内置模块之http模块
javascript·后端
FogLetter3 分钟前
🧙‍♂️ 魔法笔记:JavaScript 词法作用域与闭包的神秘世界
javascript·后端
Hockor5 分钟前
写给前端的 Python 教程四(列表/元组)
前端·后端·python
GetcharZp6 分钟前
「DPlayer」超强弹幕视频播放器来了!支持m3u8直播,5分钟搞定集成!
前端
天天码行空9 分钟前
Bootstrap Table企业级web数据表格集成框架
前端·javascript·开源
import_random14 分钟前
[关联规则]apriori算法和fp-growth算法(区别)
前端