在状态中查找对象并更新 属性

Find object in state and update property

我设置的动态状态有问题。我的第一个状态是这样的:

const [exercises, setExercises] = useState([{
  id: 123,
  title: "Title here",
  category: "someCategory"
}])

然后用户选择了此状态的项目。我创建了表示所选对象的第二个状态,但向其添加了其他属性。例如,我正在添加和初始化属性 'amount' 和 'unit'.

const [selectedExercises, setSelectedExercises] = useState([{
  id: 123,
  title: "Title here",
  category: "someCategory",
  amount: 0,
  unit: ''
}])

我希望用户从表格中选择数量和单位。我如何访问和更改状态中的这两个属性?由于不知道用户的选择,只好先找到状态内的对象

我已经尝试过(el 从某处的输入元素调用):

setSelectedExercises([
  ...selectedExercises,
  (selectedExercises.find(exercise => exercise.title === el.title).amount = 1),
  ])

如何找到有问题的对象并更新其数量 属性(例如在 onChange 方法中)?

const [selectedExercises, setSelectedExercises] = useState([{
  id: 123,
  title: "Title here",
  category: "someCategory",
  amount: 0,
  unit: ''
}]);

// Your handler should look like this and 
// you should call handleAmountChange(el.id, 1)

function handleAmountChange(amount, id) {
  setSelectedExercises(prev => prev.map(selectedExercise => {
    if (selectedExercise.id === id) {
      return {
        ...selectedExercise,
        amount
      }
    }

    return selectedExercise;
  }));
}

更改任何 属性 的更通用的函数如下所示。

function handleChange(id, property, value) {
  setSelectedExercises(prev => prev.map(selectedExercise => {
    if (selectedExercise.id === id) {
      return {
        ...selectedExercise,
        [property]: value
      }
    }

    return selectedExercise;
  }));
}