【发布时间】:2019-12-11 10:06:41
【问题描述】:
我正在使用 material-table 组件,我用来自 Redux(对象数组)的动态数据填充该组件,但随后我在组件状态中使用该数据执行其他操作。要创建列下拉过滤器,每列的选项数组中有一个元素lookup,它接收一个对象并根据其值创建下拉列表。
我正在从我的数据中提取一些项目并将它们放入我组件状态的元素中。这是一个对象,与lookup 接收的对象相同。问题是该组件显示一个空的下拉列表,就好像该对象是空的,但事实并非如此。我将它登录到控制台,并且该对象充满了我需要的数据。
我最初认为这是一个渲染问题,对象一开始是空的,然后它充满了数据,但组件每次都渲染。(是的,React 是反应式的)。
这只是帮助我解决这个问题所需的代码:
表格组件
import React, { Component } from "react";
import MaterialTable from "material-table";
class CustomTable extends Component {
state = {
column1: "",
column2: "",
column3: "",
column1FilterList: {}
columns: [
{
title: "Column1",
field: "column1",
editable: "onAdd",
filtering: true,
lookup: { ...this.column1FilterList }
},
{
title: "Column2",
field: "column2",
editable: "onAdd",
filtering: true,
},
{
title: "Column3",
field: "column3",
editable: "onAdd",
filtering: true
}
]
};
componentDidMount() {
this.props.fetchValues()
this.props.fetchApplications()
this.filterColumn1ExistingKeys()
}
filterColumn1ExistingKeys = () => {
return this.props.elements.map(element => {
return this.setState(prevState => ({
column1FilterList: {
...prevState.column1FilterList,
[element.name]: element.name
}
}))
})
}
render() {
return (
<div>
<MaterialTable
options={{
search: false,
actionsColumnIndex: 4,
filtering: true
}}
title="Search by"
columns={this.state.columns}
data={this.state.data}
/>
</div>
);
}
}
export default CustomTable;
【问题讨论】:
-
你在哪里使用filterColumn1ExistingKeys函数??
-
在
componentDidMount()。我忘记粘贴了。现在代码已编辑。 -
你能把你的代码放在codesandbox里吗?我还是没明白。什么是 CustomTable,您使用的是两个组件。 componentDidMount 中的其他函数是如何工作的??
-
我觉得我做不到。是工作相关的。很抱歉复制错误。有很多代码。修复了组件。
-
很难从这段代码中分辨出来。尝试制作小型 POC,看看代码沙箱上发生了什么。
标签: javascript reactjs jsx material-table