reactjs - 如何将 React 类组件字段转换为钩子
问题描述
我知道将 React Class 组件转换为函数式组件的要点,但我发现了一个实例,我在互联网上搜索也知道答案。
export default class Counter extends Component<Props, State> {
count = 0
updateCount = ()=> this.count +=1
render() {
return <div onClick={this.updateCount}>{this.count}</div>
}
}
忽略该类的丑陋,但是我如何使用 useRef 将计数转移到功能组件中?
我问的原因是因为在我试图转换的另一个类中,我有一个异步 PromisePool 正在运行,每次承诺完成时都会更新下载的变量,当我尝试downloaded
进入状态时,它总是会重新渲染组件和丢失数据。
解决方案
使用useRef
,您可以创建一个不会在每次重新渲染时初始化的变量。上面的组件看起来像
export default () => {
const count = useRef(0);
const updateCount = ()=> count.current +=1
render() {
return <div onClick={updateCount}>{count}</div>
}
}
但是,您必须知道更新 ref 不会导致重新渲染,因此更新的值不会反映在渲染中
如果您希望触发重新渲染,请useState
改用
export default () => {
const [count, setCount] = useState(0);
const updateCount = ()=> setCount(prevCount => prevCount + 1);
render() {
return <div onClick={updateCount}>{count}</div>
}
}
推荐阅读
- selenium - com.browserstack.local.LocalException:尝试下载 BrowserStackLocal 二进制文件时出错
- android - 底部导航的第三个选项卡应包含抽屉菜单
- c# - DateTimePicker 在 WinForm 中设置 DropDownList 样式
- java - Firebase 事务返回 ArrayList 处理
- css - 使用@page 隐藏第一页的内容
- amazon-web-services - AWS Textract 如何测量页数?
- javascript - 在反应中上传图像不返回表单数据值
- dialogflow-es - Dialogflow 实体 - 区分大小写
- python - Python - 订购字典/嵌套字典的元组
- azure - Azure - 从 Outlook 下载附件而不使用 logicapp 并将其移动到 Blob 存储