javascript - 在函数组件中存储变量值
问题描述
因此,在 React 类组件中,我可以非常轻松地添加一个属性:
export default class Thing extends Component {
constructor(props){
super(props)
this.hasRunQuery = false
}
handleClick = () => {
this.hasRunQuery = true
}
render(){
return (
<button onClick={this.handleClick}>
Click
</button>
)
}
当它卸载/重新安装时,这个变量当然会被重新设置(因为它是类的一个新实例)。功能组件似乎没有这种奢侈:
let hasRunQuery = false
export default () => {
handleSubmit = () => {
hasRunQuery = true
}
return (
<button onClick={handleSubmit}>
Click
</button>
)
}
如果上述组件卸载并重新安装,hasRunQuery
则仍然如此。如果这个组件有 10 个实例,它们会以某种方式共享同一个变量。
除了在 中存储任何和所有属性之外useState
,是否有任何方法可以在函数组件中设置变量,一旦卸载就不会保留其值?
解决方案
在功能组件中,这是通过useRef
export default () => {
const hasRunQuery = useRef(false)
const handleSubmit = () => {
hasRunQuery.current = true
}
return (
<button onClick={handleSubmit}>
Click
</button>
)
}
有关更多信息,请参阅 api 文档,以及常见问题解答的这一部分
推荐阅读
- javascript - 离开页面后移除 Javascript cookie
- java-8 - ProcessBuilder 不使用 Tika 1.26 和 JDK 1.8 为 Tesseract 4.1 和更高版本创建 tmp 文件
- javascript - 调用 slideUp() 时 div 向左移动
- flutter - 底部溢出 1.9 个像素的 RenderFlex
- php - 如何将 JSON 项添加到 PHP 字符串?
- web - 在局域网上运行的网站是否需要https保护?
- android - 如果答案正确,如何通过语音转文本打开新活动
- python - 为什么 background_gradient 不适用于两种不同的颜色?
- python - 如何在标签 Pyqt5 上更新图像(opencv)时调用其他函数?
- java - 插入 if 语句