React 的元素节点在使用 css 模块声明时没有 css 属性
React's element node doesn't have css properties when declared with css modules
当我使用 CSS 模块为反应元素设置样式时,我无法获取节点的样式。该节点中的所有样式都是空字符串。在这种情况下如何访问节点的样式。
<div className={collapseTitle} onClick={collapseCard}>Caard</div>
const collapseCard =(e) => {
console.log(e.target.style.maxHeight)
}
CSS 文件
.collapseTitle {
max-height: 10px
}
下面是工作代码。
import React,{useRef} from "react";
import "./styles.css";
export default function App() {
const divRef =useRef<HTMLDivElement>(null);
const collapseCard =(e:any) => {
console.log(e.target.style.maxHeight)
const styles = getComputedStyle(divRef.current!)
console.log(styles);
console.log(styles.textAlign);
}
return (
<div className="App" ref={divRef} onClick={collapseCard}>
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
解决方案 2:- 在循环中使用 Ref
const arrLength = arr.length;
const [elRefs, setElRefs] = React.useState([]);
const collapseCard =(e:any,divRef:any) => {
console.log(e.target.style.maxHeight)
const styles = getComputedStyle(divRef.current!)
console.log(styles);
console.log(styles.textAlign);
}
React.useEffect(() => {
// add or remove refs
setElRefs(elRefs => (
Array(arrLength).fill().map((_, i) => elRefs[i] || createRef())
));
}, [arrLength]);
return (
<div>
{arr.map((el, i) => (
<div className="App" ref={elRefs[i]} onClick={()=>collapseCard(elRefs[i])}>...</div>
))}
</div>
);
当我使用 CSS 模块为反应元素设置样式时,我无法获取节点的样式。该节点中的所有样式都是空字符串。在这种情况下如何访问节点的样式。
<div className={collapseTitle} onClick={collapseCard}>Caard</div>
const collapseCard =(e) => {
console.log(e.target.style.maxHeight)
}
CSS 文件
.collapseTitle {
max-height: 10px
}
下面是工作代码。
import React,{useRef} from "react";
import "./styles.css";
export default function App() {
const divRef =useRef<HTMLDivElement>(null);
const collapseCard =(e:any) => {
console.log(e.target.style.maxHeight)
const styles = getComputedStyle(divRef.current!)
console.log(styles);
console.log(styles.textAlign);
}
return (
<div className="App" ref={divRef} onClick={collapseCard}>
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
解决方案 2:- 在循环中使用 Ref
const arrLength = arr.length;
const [elRefs, setElRefs] = React.useState([]);
const collapseCard =(e:any,divRef:any) => {
console.log(e.target.style.maxHeight)
const styles = getComputedStyle(divRef.current!)
console.log(styles);
console.log(styles.textAlign);
}
React.useEffect(() => {
// add or remove refs
setElRefs(elRefs => (
Array(arrLength).fill().map((_, i) => elRefs[i] || createRef())
));
}, [arrLength]);
return (
<div>
{arr.map((el, i) => (
<div className="App" ref={elRefs[i]} onClick={()=>collapseCard(elRefs[i])}>...</div>
))}
</div>
);