【发布时间】:2019-11-07 17:19:30
【问题描述】:
我想根据对象数组中存在的属性在反应中设置状态。
看起来相似的代码沙盒:https://codesandbox.io/s/sleepy-lamarr-0sbdz
这个提交函数在 SelectComponent.tsx 中以 submitSelection() 的形式出现,我在控制台记录了问题中的状态。是一样的
我有一个看起来像这样的状态对象:
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”的值来设置“columns”的状态。我必须遍历“selectedOptions”数组,然后根据每个对象的“value”(这里我用它作为键),我需要更新“columns”中对象的相应“show”属性。
在这个例子中,columns 数组应该像 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);
}
【问题讨论】:
标签: javascript reactjs typescript ecmascript-6 setstate