react中报错Failed to set an indexed property on ‘CSSStyleDeclaration‘: Index property setter is not sup

React中LESS样式正确引用
本文纠正了在React项目中使用LESS文件时常见的样式声明错误,并展示了正确的元素类名引用方式。

其实这不算是一个问题,是你的一个小疏忽!
在这里插入图片描述
当我们在react中使用less文件书写CSS样式的时候,组件中我们声明页面元素的类名应该写成:

      <Row className={style.mainContainer}></Row>

注: 这个style是我们引入的less文件的别名

      import style from './style.less';

而出现上面的报错是因为你疏忽在行内样式声明里写了元素的类名,如下:

     <Row style={style.mainContainer}></Row>
在现代浏览器中,`CSSStyleDeclaration` 对象用于表示元素的内联样式或通过样式表应用的样式。然而,该对象并不支持直接设置索引属性(如 `style[0] = 'color: red'`),这会引发错误:`Failed to set an indexed property on 'CSSStyleDeclaration': Indexed property setter is not supported` [^2]。该问题通常出现在某些现代浏览器中,因为它们遵循了更新的 CSS 标准,不再允许对 `CSSStyleDeclaration` 的索引属性进行赋值 [^1]。 ### 常见场景与错误示例 当使用 Vue 或 React 等前端框架时,如果尝试以非标准方式操作 `style` 属性,例如返回字符串而非对象,或者试图通过索引设置样式属性,就可能触发此错误。例如在 Vue + Element UI 的 `el-table` 组件中,使用 `:cell-style` 时返回字符串而不是对象,会导致浏览器报错 [^3]: ```javascript const colCellStyle = (obj) => { if (obj.columnIndex === 1) { return "background:yellow"; // ❌ 错误:返回字符串而非对象 } } ``` ### 正确的使用方式 为了修复该问题,应确保样式属性的设置方式符合规范。在 JavaScript 中,应通过对象形式设置样式,而不是使用索引或字符串形式 [^3]: ```javascript const colCellStyle = (obj) => { if (obj.columnIndex === 1) { return { 'background-color': '#F56C6C' }; // ✅ 正确:返回样式对象 } } ``` 此外,在 JSX 或 React 中,也应避免将 `style` 设置为字符串或其他非对象类型。例如,以下写法是错误的: ```jsx // ❌ 错误写法 <div style={style.name} /> <div className={margin:`${heightCount}`} /> ``` 正确的做法是将 `style` 设置为一个对象: ```jsx // ✅ 正确写法 <div className={style.name} style={{ margin: `${heightCount}` }} /> ``` ### 原因分析 `CSSStyleDeclaration` 的索引属性(如 `style[0]`)原本用于访问样式规则的键名,但在最新浏览器版本中,这些索引属性已被移除 setter 方法,因此无法再通过索引进行赋值 [^2]。开发者应避免依赖这种非标准的写法,而应使用标准的 `style.propertyName` 或 `style.setProperty()` 方法。 ### 建议 - 避免使用 `style[index] = value` 的方式设置样式。 - 在 Vue、React 等框架中,确保 `style` 属性始终是对象形式。 - 使用 `element.style.propertyName` 或 `element.style.setProperty('--prop', value)` 设置样式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值