Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否正在更新React Native中的嵌套状态对象?_Javascript_Arrays_Reactjs_React Native_Updating - Fatal编程技术网

Javascript 是否正在更新React Native中的嵌套状态对象?

Javascript 是否正在更新React Native中的嵌套状态对象?,javascript,arrays,reactjs,react-native,updating,Javascript,Arrays,Reactjs,React Native,Updating,我正在创建一个购物清单应用程序,让用户能够创建购物清单。用户创建的每个购物列表都具有以下属性: 钥匙 名称 预算 列表项 listItem属性中嵌套的是列表项的对象数组 每个列表项都具有以下属性: 身份证件: 姓名: 价格: 以下是一段代码片段: const [shoppingLists, setShoppingList] = useState([ {key: '1', name: `Khari's Shopping List`, budget: 200, listItems:[

我正在创建一个购物清单应用程序,让用户能够创建购物清单。用户创建的每个购物列表都具有以下属性:

钥匙 名称 预算 列表项

listItem属性中嵌套的是列表项的对象数组

每个列表项都具有以下属性: 身份证件: 姓名: 价格:

以下是一段代码片段:

const [shoppingLists, setShoppingList] = useState([
    {key: '1', name: `Khari's Shopping List`, budget: 200, listItems:[
            {id: Math.random().toString(), name:"butter", price:2.00},
            {id: Math.random().toString(), name:"milk", price:2.00},
            {id: Math.random().toString(),  name:"cereal", price: 3.00},
            {id: Math.random().toString(),  name:"chicken", price: 4.00},
            {id: Math.random().toString(),  name:"spaghetti", price: 5.00},
        ], },
    {key: '2', name: `Janae's Shopping List`, budget: 500, listItems:[
            {id: Math.random().toString(), name:"butter2", price:0.00},
            {id: Math.random().toString(), name:"milk2", price:0.00},
            {id: Math.random().toString(),  name:"cereal3", price: 0.00},
            {id: Math.random().toString(),  name:"chicken2", price: 0.00},
            {id: Math.random().toString(),  name:"spaghetti2", price: 0.00},
        ], },

])
我想做的是,当用户在文本输入中输入数字时,更新嵌套在列表项中的price属性。有什么办法可以做到这一点吗


当用户在文本输入中输入一个数字时,我将根据id更新列表项数组中的price属性。我不确定从何处开始,希望得到一些指导。感谢您提供的帮助。

在功能组件状态更新中,您需要将现有状态简单地复制到新对象中,以更新特定对象。对于更深入的嵌套状态,您还需要复制嵌套状态并进行更新

给定指定的
id
,并更新
价格

setShoppingList(lists =>
  lists.map(list =>
    list.key === key
      // Key matches, spread existing state and update list items array
      ? {
          ...list,
          listItems: list.listItems.map(item =>
            item.id === id
              // Item id match, spread existing item and update price
              ? {
                  ...item,
                  price
                }
              // No item id match, pass existing item
              : item
          )
        }
      // No key match, pass existing list
      : list
  )
);

Math.random().toString()
东西是错误的,你应该修复它。我知道它是错误的,这只是为了测试目的@Adam。谢谢你,这非常有用,我现在知道该从哪里着手了@如果这解决了你的问题,那么请接受作为答案,如果你觉得有帮助,请投票。