reactjs - 如何使用 React 在类组件中编写此代码
问题描述
这段代码使用反应钩子写在函数组件中,我可以使用类组件来编写这段代码,但我不明白这怎么可能,因为反应钩子只在函数组件中使用。
谁能帮助我怎么可能
import React, { useState, useRef } from "react";
function Accordion(props) {
const [setActive, setActiveState] = useState("");
const [setHeight, setHeightState] = useState("0px");
const content = useRef(null);
function toggleAccordion() {
setActiveState(setActive === "" ? "active" : "non-active");
console.log(content);
setHeightState(setActive === "active" ? "0px" : `${content.current.scrollHeight}px`);
}
return (
<div className="accordion__section">
<button className={`accordion ${setActive}`} onClick={toggleAccordion}>
<div className="accordion__title"
dangerouslySetInnerHTML={{ __html: props.title }}
/>
</button>
<div ref={content} style={{ maxHeight: `${setHeight}` }} className="accordion__content">
<div
className="accordion__text"
dangerouslySetInnerHTML={{ __html: props.content }}
/>
</div>
</div>
);
}
export default Accordion;
解决方案
class Accordion extends React.Component {
state = {
active: '',
height: '0px',
}
content = React.createRef(null);
toggleAccordion = () => {
this.setState({
active: this.state.active === "" ? "active" : "non-active",
height: this.state.active === "active" ? "0px" : `${this.content.current.scrollHeight}px`
})
}
render() {
return (
<div className="accordion__section">
<button className={`accordion ${this.state.active}`} onClick={this.toggleAccordion}>
<div className="accordion__title"
dangerouslySetInnerHTML={{ __html: this.props.title }}
/>
</button>
<div ref={content} style={{ maxHeight: this.state.height }} className="accordion__content">
<div
className="accordion__text"
dangerouslySetInnerHTML={{ __html: this.props.content }}
/>
</div>
</div>
)
}
}
推荐阅读
- docker - Express 会话不会通过 Docker 在 Graphql 中保持会话
- axapta - Dynamics365详细主模式,总是加载第一条记录,如何判断新按钮何时按下?
- unit-testing - Phpunit 方法@depends 不接收
- python - 将字符串(一组坐标)解析为python中的浮点列表的干净方法?
- gradle - 在以下任何来源中都找不到插件 [id: 'com.github.ben-manes.versions']
- php - Symfony 2.8 和 3.4 中事件调度和处理的区别?
- javascript - 让 Angularjs 重新附加一个 DOM 节点而不是更新它
- python - 如何在不通过 kubectl 的情况下上传 Airflow dags(工作流)?
- python-3.x - Python 3 使用 24 位 (HTML5) rgb 代码打印文本
- c# - Dapper 多重映射