reactjs TypeError:无法添加属性Quantity,对象不可扩展

oalqel3c  于 2022-12-22  发布在  React
关注(0)|答案(1)|浏览(386)

我得到这个错误-
文件.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"

如何修复此错误?

bkkx9g8r

bkkx9g8r1#

你必须已经设置了Object.preventExtensions()或者你使用的任何库正在为你做同样的事情。在这个调用之后,你不能向作为调用中的参数传递的对象添加新的属性,在你的例子中,你可能添加了"Quantity"字段,而它不在原始对象中。
Object.preventExtensions()方法防止新属性被添加到对象中(即防止对象的未来扩展)。Source
JavaScript异常“无法定义属性“x”:当Object.preventExtensions()将一个对象标记为不再可扩展时,就会出现“obj”is not extensible”的情况,这样,该对象的属性就不会超出它被标记为不可扩展时的属性。Source
strict mode中,尝试向不可扩展对象添加新属性会抛出TypeError。在草率模式下,添加“x”属性会被忽略。Source
下面是复制相同内容的代码。

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

或者你可能试图通过添加键Quantity来更新一个不可变的对象,比如String,这在strict模式下是不可能的,我们得到了TypeError,而在Sloppy模式下它只是被忽略了。

'use strict';

const str = "abc";

str["Quantity"] = 1;

相关问题