React项目点击加随机数报cache2.push is not a function怎么解决
错误原因
Array.push()方法的返回值是修改后数组的长度,属于数字类型,不是数组本身。你第一次执行函数时,初始状态的cache2是数组,push操作可以正常执行,但你将push返回的数字传入setCache2,会把cache2的状态直接覆盖为数字。第二次触发函数时,数字类型的cache2调用push方法就会抛出类型错误。- React状态更新要求遵循不可变原则,直接调用
push修改原有状态数组属于可变操作,不符合React的状态更新规范,容易出现状态同步异常问题。
修复代码
你需要创建一个新的数组传入状态更新函数,不要直接修改原有状态数组,推荐使用函数式更新写法保证拿到的旧状态始终是最新值:
import { useState } from 'react'; function App() { const [cache2, setCache2] = useState([]) const nextNumber = () => { const randomNr = Math.floor(Math.random() * 10) // 函数式更新+展开运算符,生成全新数组更新状态 setCache2(prev => [...prev, randomNr]) } return ( <div className='App'> <button onClick={nextNumber}>Next Number</button> {/* 可添加渲染项验证结果 */} <p>随机数列表:{cache2.join(', ')}</p> </div> ); }
补充说明
React的状态更新是异步操作,你在原代码中setCache2之后直接打印cache2,拿到的是更新前的旧状态值,如果需要使用更新后的状态,可以直接在渲染逻辑中调用,或者通过useEffect监听cache2的变化执行后续逻辑。
内容的提问来源于stack exchange,提问作者Gustavo
相关产品推荐
相关产品推荐

