reactjs - TypeError:无法添加属性数量,对象不可扩展
问题描述
我收到此错误 -
Cannot add property Quantity, object is not extensible
在 Files.jsx 中
itemsInCart对象数组在 App.jsx 中定义并填充到其他jsx 组件中,我使用控制台进行了检查。
应用程序.jsx
const ItemsCartWithLocalStorage = (userItems) => {
const itemsInCart = useRef(
JSON.parse(localStorage.getItem(userItems)) || new Array());
useEffect(() => {
console.log('localStorage setItem');
localStorage.setItem(userItems, JSON.stringify(itemsInCart));
}, [itemsInCart]);
return [itemsInCart];
};
function App() {
const itemsInCart = useRef(ItemsCartWithLocalStorage('itemsQuantityString'));
return (
<Files itemsInCart={itemsInCart} />
)
}
文件.jsx
const Files= ({ itemsInCart }) => {
const array = [...itemsInCart.current];
for (let i = 0; i < array.length; i++) {
array[i]['Quantity'] = 1; "TypeError: Cannot add property Quantity, object is not extensible"
我该如何解决这个错误?
解决方案
您必须设置Object.preventExtensions()
或您使用的任何库都在为您做同样的事情。在此调用之后,您无法将新属性添加到作为调用中的参数传递的对象,在您的情况下,您可能正在添加该"Quantity"
字段并且它不在原始对象中。
该
Object.preventExtensions()
方法防止新属性被添加到对象(即防止将来扩展对象)。资源
JavaScript 异常“无法定义属性“x”:“obj”不可扩展”在
Object.preventExtensions()
将对象标记为不再可扩展时发生,因此它永远不会具有超出其被标记为不可扩展时的属性- 可扩展。资源
下面是复制相同的代码。
'use strict';
const itemsInCart = {current:[{a:"a"},{a:"b"}]};
Object.preventExtensions(itemsInCart.current[1]);
const array = [...itemsInCart.current];
array[1]["q"] = 1
console.log(itemsInCart.current)
或者您可能正在尝试String
通过添加 key来更新不可变对象Quantity
。在模式下这是不可能的strict
,我们TypeError
在 Sloppy 模式下得到它只是被忽略了。
'use strict';
const str = "abc";
str["Quantity"] = 1;
推荐阅读
- firebase - 使用哪种方法来保存游戏数据并在 Flutter 中显示它们?
- spring - 在哪里设置休眠刷新模式?
- axon - 在 axonframework 应用程序的命令处理程序中触发另一个命令
- angular - Angular 库和 peerDependencies 解决方案
- python - 'int' 对象不能使用 type() 进行下标
- azure - Wix 安装程序 - 重新安装失败 - Azure 机器
- c# - Update is not working for many-to-many relationship. Entity Framework Core 2.2
- python - 使用 Python 从 URL 中选择性地编辑可变长度密钥
- javascript - Showing/hiding checkbox based on another checkbox selection
- python - How to do generate some scenarios using a predicted cdf in Matlab or Python?