【问题标题】:React's element node doesn't have css properties when declared with css modulesReact 的元素节点在使用 css 模块声明时没有 css 属性
【发布时间】:2021-04-09 17:00:51
【问题描述】:

当我使用 CSS 模块设置 react 元素的样式时,我无法获取节点的样式。该节点中的所有样式都是空字符串。在这种情况下如何访问节点的样式。

<div className={collapseTitle} onClick={collapseCard}>Caard</div>

const collapseCard =(e) => {
        console.log(e.target.style.maxHeight)
}

CSS 文件

.collapseTitle {
   max-height: 10px
}

【问题讨论】:

标签: javascript css reactjs dom dom-events


【解决方案1】:

这是下面的工作代码。

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>
  );

【讨论】:

  • collapse title div 将在 for each 循环中,因此我无法为其中的所有值定义 ref
  • 我为您的用例添加了解决方案
猜你喜欢
  • 2019-12-19
  • 2018-08-19
  • 2020-01-02
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2021-07-12
相关资源
最近更新 更多