以不可变的方式更新子组件中父组件的状态
Updating the state of a parent in child component in a immutable way
我有一组具有以下属性的对象。
columns = [
{Header: ƒ, Cell: ƒ, sortable: false, show: true},
{Header: ƒ, accessor: "firstName", sortable: false, show: true},
{Header: ƒ, accessor: "status", sortable: false, show: true},
{Header: ƒ, accessor: "visits", sortable: false, show: true}
]
我将这个对象数组发送给子组件,还有一个方法将用于从子组件设置父组件的状态
父组件
<Child columns={this.props.child} handleSetState={this.handleSetState}/>
handleSetState = columns => {
this.setState({ columns });
};
我在子组件中有一个下拉组件,我在其中显示复选框作为从道具中提取的选项。我还 select 一些选项,当我点击 Apply 时,匹配对象的 属性 应该更新,相应的父状态
例如,点击应用,我形成了这个数组
值 = ['firstName','status'];
所以我需要父状态 'show' 属性 应该更新到它的反转值。基本上显示用于show/hide列
子组件
value = ['firstName','status'];
submitSelection = () => {
let updatedObj = this.props.columns.map((obj, i) => {
if (obj.accessor === value[i]) {
obj.show = !obj.show;
}
return obj;
});
this.props.handleSetState(updatedObj);
};
在第一个 selection 上,我希望状态应该更新为:
[
{Header: ƒ, Cell: ƒ, sortable: false, show: true},
{Header: ƒ, accessor: "firstName", sortable: false, show: false},
{Header: ƒ, accessor: "status", sortable: false, show:false},
{Header: ƒ, accessor: "visits", sortable: false, show: true}
]
我无法在 'submitSelection()' 中正确映射索引。是否有比此处更清晰的逻辑?
不胜感激
您可以通过以下方式编写您的 submitSelection
函数:
values = ['firstName','status'];
submitSelection = () => {
const updatedObj = this.props.columns.map(o =>
values.some(val => val === o.accessor)
? { ...o, show: !o.show }
: {...o}
);
this.props.handleSetState(updatedObj);
};
我有一组具有以下属性的对象。
columns = [
{Header: ƒ, Cell: ƒ, sortable: false, show: true},
{Header: ƒ, accessor: "firstName", sortable: false, show: true},
{Header: ƒ, accessor: "status", sortable: false, show: true},
{Header: ƒ, accessor: "visits", sortable: false, show: true}
]
我将这个对象数组发送给子组件,还有一个方法将用于从子组件设置父组件的状态
父组件
<Child columns={this.props.child} handleSetState={this.handleSetState}/>
handleSetState = columns => {
this.setState({ columns });
};
我在子组件中有一个下拉组件,我在其中显示复选框作为从道具中提取的选项。我还 select 一些选项,当我点击 Apply 时,匹配对象的 属性 应该更新,相应的父状态
例如,点击应用,我形成了这个数组
值 = ['firstName','status'];
所以我需要父状态 'show' 属性 应该更新到它的反转值。基本上显示用于show/hide列
子组件
value = ['firstName','status'];
submitSelection = () => {
let updatedObj = this.props.columns.map((obj, i) => {
if (obj.accessor === value[i]) {
obj.show = !obj.show;
}
return obj;
});
this.props.handleSetState(updatedObj);
};
在第一个 selection 上,我希望状态应该更新为:
[
{Header: ƒ, Cell: ƒ, sortable: false, show: true},
{Header: ƒ, accessor: "firstName", sortable: false, show: false},
{Header: ƒ, accessor: "status", sortable: false, show:false},
{Header: ƒ, accessor: "visits", sortable: false, show: true}
]
我无法在 'submitSelection()' 中正确映射索引。是否有比此处更清晰的逻辑?
不胜感激
您可以通过以下方式编写您的 submitSelection
函数:
values = ['firstName','status'];
submitSelection = () => {
const updatedObj = this.props.columns.map(o =>
values.some(val => val === o.accessor)
? { ...o, show: !o.show }
: {...o}
);
this.props.handleSetState(updatedObj);
};