我正在将 react table v7 用于项目(table-columns)。其中一列 ( 'activated'
) 是布尔值,在更改时,它会调用不同的组件,这将更改布尔值。新的布尔值通过回调设置为:
{
Header: ' ',
accessor: 'activated',
style:{width: '3%'},
sortType: 'basic',
Cell: props => {
let isactivated = props.data[props.row.index].activated;
return <MyComponent
id={props.data[props.row.index].id}
name={props.data[props.row.index].name}
activated={isactivated}
callback={()=>{
let new_data = this.state.data;
new_data[props.row.index].activated = !isactivated;
store.dispatch();
isactivated = !isactivated;
this.setState({data: [...new_data]});
}}
/>
return <span title={isactivated ? "Enabled" : "Disabled"}>{isactivated ? ✅ : ❌}</span>
},
我遇到的问题是,这样做this.setState({data: [...new_data]});
会重新加载整个表并将其设置为排序和过滤值。这意味着,例如,如果我的过滤是显示所有已激活的 = ✅,然后我将其中一项从 ✅ 更改为 ❌,则更改完成后,表格将重新加载并继续仅显示带有 ✅ 的对象,因此更改项目从视图中消失了。但是,我想停止重新加载,并保留当前视图,即使它与默认排序和过滤不匹配。
我找到的部分解决方案是将回调设置状态的方式更改为this.setState({data: new_data});
. 这样,排序和过滤不会重新加载,并保持表格显示。但是,如果在那之后,我使用排序或过滤,它不知道该项目已从 ✅ 更改为 ❌。我意识到发生这种情况是因为仅props.data
更改了此方法,而不是更改了props
,其中包括props.preFilteredRows
并且似乎这就是完成排序和过滤的地方。
有没有办法在操作后不重新加载默认排序和过滤来更改状态?
提前致谢!