Я использую arrayHelpers от Formik, чтобы вывести sh и удалить объекты из массива объектов. Pu sh работает как положено и добавляет объект и его значения в массив. Удаление работает, когда вы выбираете только один элемент в массиве, а затем снимаете его. Проблема, однако, начинается при выборе нескольких элементов. Например, вы выбираете первый элемент, и он добавляется в массив, а затем выбираете второй элемент, и он добавляется в массив, но, скажем, вы хотите отменить выбор этого второго элемента и щелкнуть по нему, первый элемент отменяется. Затем, если вы нажмете на него еще раз, он отменяет выбор второго элемента.
initialValue: lenders: []
/*mock array of lenders*/
const lenders = [
{
id: 1,
text: 'Lender1',
value: 'Lender1',
},
{
id: 2,
text: 'Lender2',
value: 'Lender2',
},
{
id: 3,
text: 'Lender3',
value: 'Lender3',
},
]
<FieldArray
name="lenders"
render={arrayHelpers => (
<div className="lenders">
{lenders.map(lender => (
<div key={lender.id}>
<Field name={`lender${lender.id}`}>
{({ field, meta }) => (
<SelectableCard
id={field.name}
name={field.name}
text={lender.value}
isSelected={props.values.lenders.some(
len => len.id === lender.id
)}
label={lender.value}
inputName={field.name}
value={lender.value}
ref={field.ref}
onClick={evt => {
let isSelected = props.values.lenders.some(
len => len.id === lender.id
);
isSelected
? arrayHelpers.remove(lender)
: arrayHelpers.push({
id: lender.id,
value: lender.value,
});
field.onChange({
target: {
id: lender.id,
value: !isSelected,
},
});
}}
/>
)}
</Field>
</div>
))}
</div>
)}