我在 react+redux 应用程序中使用 Ag Grid。我需要使网格持久化的列状态。换句话说,每当用户对列进行更改(顺序、排序、隐藏\显示等)时,应用程序必须将列状态保存到 DB。然后当用户再次出现时,必须恢复列状态。我的方法是使用在各种事件回调和redux 操作中将columnApi.getColumnState()状态推送到数据库。我没有错误,但是没有应用状态。这是我的组件示例代码(我正在使用):columnApi.setColumnState()componentDidMountreact-thunk
@(connect(selector, { getColumnStateAction, saveColumnStateAction }) as any)
class MyComponent extends Component<Props, {}> {
private columnApi:any
onGridReady(params) {
const { columnState } = this.props
params.columnApi.setColumnState(columnState)
this.columnApi = params.columnApi
}
onColumnChanged() {
saveColumnStateAction(this.columnApi.getColumnState())
}
componentDidMount() {
getColumnStateAction()
}
render() {
const { columnDefs } this.props
const gridOptions = {
columnDefs,
onGridReady: this.onGridReady,
onColumnVisible: this.onColumnChanged,
onColumnResized: this.onColumnChanged,
onColumnMoved: this.onColumnChanged,
onColumnPinned: this.onColumnChanged
}
<AgGridReact { ...gridOptions } />
}
}
这是我的行动:
const getColumnStateAction = () => async(dispatch:Dispatch) => {
const columnState = await fetchFromDb();
dispatch({ type:'GET_COLUMN_STATE', payload:columnState })
}
const saveColumnStateAction = (columnState:any) => async(dispatch:Dispatch) => {
await saveToDb(columnState);
dispatch({ type:'SAVE_COLUMN_STATE' })
}
我的问题是:我应该在何时何地恢复 columnState 以便将其应用于我的网格。关键是我在使用 redux 之前有工作代码。下面的代码有效并且正确应用了状态:
@(connect(selector, { getColumnStateAction, saveColumnStateAction }) as any)
class MyComponent extends Component<Props, {}> {
private columnApi:any
onGridReady(params) {
this.columnApi = params.columnApi
}
async onColumnChanged() {
await saveToDb(this.columnApi.getColumnState());
}
async componentDidMount() {
const columnState = await fetchFromDb();
this.columnApi.setColumnState(columnState)
}
render() {
const { columnDefs } this.props
const gridOptions = {
columnDefs,
onGridReady: this.onGridReady,
onColumnVisible: this.onColumnChanged,
onColumnResized: this.onColumnChanged,
onColumnMoved: this.onColumnChanged,
onColumnPinned: this.onColumnChanged
}
<AgGridReact { ...gridOptions } />
}
}
所以我怀疑我在 redux 上做错了什么。请帮忙。