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;
相关推荐
Azer.Chen38 分钟前
Chrome 浏览器插件收录
前端·chrome
IT专家-大狗40 分钟前
Google Chrome Canary版官方下载及安装教程【适用于开发者与进阶用户】
开发语言·javascript·chrome·ecmascript
we19a0sen3 小时前
npm 常用命令及示例和解析
前端·npm·node.js
倒霉男孩5 小时前
HTML视频和音频
前端·html·音视频
喜欢便码5 小时前
JS小练习0.1——弹出姓名
java·前端·javascript
chase。5 小时前
【学习笔记】MeshCat: 基于three.js的远程可控3D可视化工具
javascript·笔记·学习
暗暗那5 小时前
【面试】什么是回流和重绘
前端·css·html
小宁爱Python5 小时前
用HTML和CSS绘制佩奇:我不是佩奇
前端·css·html
weifexie6 小时前
ruby可变参数
开发语言·前端·ruby