Как проверить, соответствует ли объект значениям при нажатии флажка?

#reactjs

#reactjs

Вопрос:

В настоящее время у меня есть функция addToProduction. Это перебирает данные и возвращает новый объект с идентификаторами и базами данных. Обработчик изменений на флажке в настоящее время отображает все значения, однако я хочу иметь возможность регистрировать правильный идентификатор и базу данных из правильной строки, а не все значения. Затем это будет сохранено и добавлено к массиву databaseChanges при нажатии.

Комментарии:

1. Вы хотите addToProduction что- то сделать с измененным значением флажка или просто узнать, какой флажок был изменен по его идентификатору? Можете ли вы немного более четко указать, что вы хотите addToProduction сделать с конкретным флажком?

2. Я просто хочу знать, какой флажок был изменен по его идентификатору. Спасибо!

3. таким образом, он будет знать, какой checkboc был изменен по его идентификатору, а затем добавит его в конец массива databaseChanges .

Ответ №1:

Вы можете получить идентификатор из объекта onChange события.

 const addToProduction = e => {
  const { id } = e.target;

  ... // do whatever with id

  console.log(id)
}
  

И прикрепите идентификатор теста к атрибуту флажка id

 <Checkbox
  mainColor
  changeHandler={addToProduction}
  data={{}}
  id={test.id} // <-- attach id to checkbox
/>
  

Редактировать

Передайте весь test объект обработчику curried для добавления объекта в массив. Функция curried принимает test объект и возвращает функцию, которая будет использоваться в качестве обратного вызова (теперь игнорирует объект event, но вы можете принять это, если вам что-то от него нужно).

 const addToProduction = test => () => {
  const { databases, id } = test;

  console.log(databases, id)

  // append `{ id, databases }` to databaseChanges array
}
  

 <Checkbox
  mainColor
  changeHandler={addToProduction(test)}
  data={{}}
/>
  

Комментарии:

1. большое спасибо! Как я могу это сделать, чтобы включить базу данных?

2. @bloombloom Это связано с databaseChanges массивом в вашем фрагменте? Вы сказали, что вам нужен идентификатор, чтобы вы могли добавить что- то в конец этого массива, но на самом деле вы ничего больше не указали. Я предположил, что вы обработали сторону базы данных, поскольку она упоминается в вашем сообщении. Что вам нужно включить?

3. Спасибо Дрю, по сути, так же, как test.id был зарегистрирован, в нем также будет зарегистрирован test.database.

4. В этом случае я предлагаю передать test объект обработчику. Я обновлю решение. Как создается databaseChanges экземпляр и обновляется? Это что-то в состоянии локального компонента? Родительское состояние? Что и где это?

5. Изменения базы данных — это объект, который имеет все идентификаторы тестов и базы данных из родительского состояния, которое находится в unitTestDatamap, оно обновляется при добавлении нового идентификатора / базы данных.