我得到这个错误-
文件.jsx中的Cannot add property Quantity, object is not extensible
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"
如何修复此错误?
1条答案
按热度按时间bkkx9g8r1#
你必须已经设置了
Object.preventExtensions()
或者你使用的任何库正在为你做同样的事情。在这个调用之后,你不能向作为调用中的参数传递的对象添加新的属性,在你的例子中,你可能添加了"Quantity"
字段,而它不在原始对象中。Object.preventExtensions()
方法防止新属性被添加到对象中(即防止对象的未来扩展)。SourceJavaScript异常“无法定义属性“x”:当
Object.preventExtensions()
将一个对象标记为不再可扩展时,就会出现“obj”is not extensible”的情况,这样,该对象的属性就不会超出它被标记为不可扩展时的属性。Source在strict mode中,尝试向不可扩展对象添加新属性会抛出TypeError。在草率模式下,添加“x”属性会被忽略。Source
下面是复制相同内容的代码。
或者你可能试图通过添加键
Quantity
来更新一个不可变的对象,比如String
,这在strict
模式下是不可能的,我们得到了TypeError
,而在Sloppy模式下它只是被忽略了。