javascript - 在运行时读取 CSS 属性值
问题描述
我有一个像这样初始化的状态变量:
const App = () => {
const [parameters, setParameters] = useState({
"shape": "circle",
"fontFamily": "",
"size": 500
});
//...
// which is here passed to a component
return(
<MyCanvas props={parameters} />
);
}
该parameters
数组由另一个在画布上呈现某些内容的组件使用。我希望参数在应用程序的第一次加载时,在运行时,是当前在 CSS 中定义的,所以我想读取那个 CSS 属性和初始化,在这种情况下,“fontFamily”字段与用 CSS 编写的内容。@font-face {font-family: MyLocalFont;}
因此要从 CSS 定义中读取属性。
所以一般来说:我如何在运行时从 CSS 中读取一个值来初始化 useState 变量?
编译时解决方案无法满足我的需求。无需重新部署我的小部件即可更改 CSS 样式,因此我需要在初始化时在运行时读取实际的 CSS 属性值。
解决方案
import React, { useCallback } from 'react';
const defaultParameters = {
"shape": "circle",
"fontFamily": "",
"size": 500,
}
const App = () => {
const [parameters, setParameters] = useState(null);
const appRoot = useCallback(
(element) => {
const style = window.getComputedStyle(element);
const fontFamily = style.getPropertyValue('font-family');
setParameters({...defaultParameters, fontFamily });
}, []
);
//...
return (
<div ref={appRoot}>
{ parameters && <MyCanvas props={parameters} /> }
</div>
);
}
推荐阅读
- sql - T-SQL 触发器 - 审计列更改
- python-3.x - 如何使用列表动态创建 Python 类实例?
- php - 已安装 php-mysql 但未在 phpinfo 中显示
- c# - 我可以通过使用 cookie 自动重新登录到我的 SignInManager 和 UserManager (Identity) -> Asp.Net-Core Identity (Deployed live)
- shell - 为什么 curl 无法使用选项 -i 显示 http 标头
- kubernetes - 从 Kubernetes 集群中的 Worker 节点访问 Pod
- python - python webscraping:您无权访问此资源
- node.js - nodejs中不能同时导入多个tfjs模型库
- r - 如何将图表的确切值放在它上面?
- javascript - 如何在不分配的情况下迭代 Javascript 映射或对象?