gpt4 book ai didi

javascript - 从 Material 表中的 React 状态动态查找

转载 作者:行者123 更新时间:2023-12-03 13:31:08 24 4
gpt4 key购买 nike

我正在使用material-table组件,我用来自 Redux(对象数组)的动态数据填充该组件,然后我在组件状态中使用该数据执行其他操作。要创建列下拉过滤器,每列的选项数组中都有一个元素 lookup,它接收一个对象并根据其值创建下拉列表。我正在从数据中提取一些项目并将它们放入组件状态的元素中。这是一个对象,与 lookup 接收的对象相同。问题是该组件显示一个空的下拉列表,就好像该对象是空的一样,但事实并非如此。我将其登录到控制台,该对象填充了我需要的数据。我最初认为这是渲染问题,对象一开始是空的,然后填充了数据,但组件每次都会渲染。(是的,React 是响应式(Reactive)的)。这只是帮助我解决这个问题所需的代码:

表格组件

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;

最佳答案

问题在于如何保存这些数据。您可以使用 { ...this.column1FilterList } 在构造函数中创建一个新对象。这将创建一个新对象,该对象将充当查找对象,其中填充有column1FilterList(空)的初始数据。稍后更新 column1FilterList 不会更改该查找对象,因为它已断开连接(新对象)。您还必须像这样更新列内的查找:

const filterColumn1ExistingKeys = () => {
const column1FilterList = this.state.column1FilterList;
this.props.elements.forEach(element => column1FilterList[element.name] = element.name)
this.setState({
column1FilterList,
columns: [{
title: "Column1",
field: "column1",
editable: "onAdd",
filtering: true,
lookup: { ...column1FilterList }
},
{
title: "Column2",
field: "column2",
editable: "onAdd",
filtering: true,
},
{
title: "Column3",
field: "column3",
editable: "onAdd",
filtering: true
}
]
})
}

希望这有帮助。如果这对你有用,请告诉我。如果您有任何疑问,请告诉我。快乐编码。

关于javascript - 从 Material 表中的 React 状态动态查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57332234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com