簡體   English   中英

更新 React state 中的嵌套數組

[英]Updating nested array in React state

雖然 onChange 按預期工作,但 state 中的功能並未更新。 經過多次嘗試后,我想我會問,因為我很難找到與我正在嘗試做的事情相似的例子。

對象數組(為簡單起見,在本例中為一個 object)

const data = [{
    name: 'Starter',
    featured: false,
    price: { Monthly: '$49', Quarterly: '$129', Annually: '$379' },
    description: 'You’re new to the gym but want to do it right.',
    button: {
      label: 'Subscribe',
      href: '/register',
    },
    features: ['Full gym access'],
    logomarkClassName: 'fill-gray-300'}]

Map

{plans[0].features.map((feature, index) => (
  <div key={index}>
    <input
      value={feature}
      onChange={(e) => {
        feature = e.target.value
        setPlans([...plans])
      }}
    />
  </div>
))}

我可以使用下面的代碼更新 object 的價格,但由於它是一個數組,所以在功能方面存在問題。

onChange={(e) => {
  plans[0].price.Annually =
  e.target.value
  setPlans([...plans])
}}

用戶界面

![在此處輸入圖像描述

您必須至少有兩個狀態,計划selectedPlan 計划state 將保留整個數據和selectedPlan ,其中包含將被編輯的選定成員資格。

編輯表單將顯示selectedPlan ,當用戶編輯信息時,它不應直接更新主計划state,而是更新selectedPlan 計划state 只有在用戶單擊“更新按鈕”(您的圖像顯示為創建按鈕)時才會更新。

  const updatePlans = useCallback(() => {
    const updatedPlans = [...plans];
    updatedPlans[selectedPlan.id] = selectedPlan;
    setPlans(updatedPlans);
    setSelectedPlan();
  }, [plans, selectedPlan]);

在這里,我們克隆計划並使用id屬性作為助手更新所選計划。

要更新受控輸入中的特征數組,可以在value處使用toString()方法,在onChange處可以拆分輸入。

  <input
    value={selectedPlan.features.toString()}
    onChange={(e) => {
      setSelectedPlan((prevState) => {
        return { ...prevState, features: e.target.value.split(",") };
      });
    }}
  />

你可以在這里看到最小的例子:

編輯 nifty-golick-jhvy35

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM