reactjs - 有没有更好的方法来设置函数来响应钩子useState?
问题描述
我想用反应钩子使用状态来设置状态。
首先我试过了。但它没有奏效。
const [action, setAction] = useState(null);
...
<button onClick={()=>{
setAction(()=>{console.log('hi')})
}}>test</button>
第二。有效。
const [action, setAction] = useState({action: null});
...
<button onClick={()=>{
setAction({
action:()=>{
console.log('hi')
}
})}
}>test</button>
因为如果我直接设置函数,状态变为未定义。
所以我通过对象类型的函数。
但我想知道是否有另一种方法可以用函数设置状态。
解决方案
我认为你需要的是useRef
,而不是useState
......!
如文档所述,如果您将一个函数传递给useState
,它会将状态设置为value
它获取after executing
传递的函数...!
所以setAction(()=>{console.log('hi')})
意味着将action
状态设置为执行这个函数的结果()=>{console.log('hi')}
,这给了你undefined
(因为()=>{console.log('hi')}
什么都不返回)。
如果你需要存储一个函数,也许试试这个......?
import { useRef } from 'react'
// ... other code
const functionRef = useRef(null)
<button
onClick={() => functionRef.current = () => console.log('hi')}
/>
// ...
推荐阅读
- python-3.x - 一种更简洁的重新格式化日期的方法
- javascript - 获取图像,为什么 const 名称很重要?
- python - Azure 服务主体创建 - 使用 Azure 函数
- c# - 在 EF Core 3 中使用反射会引发错误
- python - 了解 Django 继承模板
- ionic3 - ionic 3 - registerBackButtonAction - 无法获取活动推送页面
- icalendar - iCalendar 在该月的第二个星期二之前的 x 天重复规则
- javascript - 如何通过人工审核修复这些漏洞?
- java - 通过Java将超过300MB的大文件上传到azure blob存储
- python - 有没有办法使用漂亮的汤来选择特定的标签?