Я хочу установить состояние в реакции на основе свойства, которое присутствует в массиве объектов.
Код Песочница, которая выглядит аналогично: https://codesandbox.io/s/sleepy-lamarr-0sbdz
Эта функция отправки присутствует как submitSelection () внутри SelectComponent.tsx, где я зарегистрировал состояние консоли в вопросе. Это идентично
У меня есть объект состояния, который выглядит следующим образом:
this state = {
columns : [
{Header: ƒ, accessor: "firstName",show: true},
{Header: ƒ, accessor: "status", show: true},
{Header: ƒ, accessor: "visits", show: true}
]
}
У меня есть список флажков, который отображает имена столбцов и на основе флага «показать» я скрываю / показываю их.
Я создаю еще один массив объектов на основе выбора флажков, который выглядит примерно так:
this.state = {
selectedOptions: [
{name: "firstName", value: "firstName", show: true},
{name: "status", value: "status", show: false},
{name: "visits", value: "visits", show: true}
]
}
Теперь мне нужно установить состояние «столбцов» на основе значения «selectedOptions». Я должен перебрать массив «selectedOptions», а затем, основываясь на «значении» (здесь я использую его в качестве ключа) каждого объекта, мне нужно обновить соответствующее свойство «show» объекта в столбцах.
В этом примере массив столбцов должен выглядеть после setstate:
columns : [
{Header: ƒ, accessor: "firstName",show: true},
{Header: ƒ, accessor: "status", show: false}, // because the value for this in selectedOptions is true
{Header: ƒ, accessor: "visits", show: true}
]
Я использовал следующий подход, но он не работал
checkboxSubmit = () => {
let { selectedOptions , columns } = this.state;
const updatedObj = columns.map(object =>
value.some(columns => columns.value === object.accessor)
? { ...object, show: columns.show }
: { ...object }
);
this.setState(columns: updatedObj);
}