https://www.primefaces.org/primereact/showcase/#/datatable https://www.primefaces.org/primereact/showcase/#/multiselect
我正在使用 PrimeReact 库来创建和自定义数据表。
我的表是动态的,将根据提供给它的数据自行构建。我根据列的数据类型为每列分配不同的过滤器,但由于列的数量可变,我必须动态创建过滤器。
为了实现这一点,我将过滤器逻辑分解到一个单独的类中,其中包含它们的状态和逻辑。
我的问题是我用作过滤器接口的 MultiSelect 组件在其值的状态更新时不会更新其值。更新状态后,该值保持为空。由于 MultiSelect 组件没有对先前选择的值的引用,我一次只能选择一个值。
我想我对类组件缺少一些了解,因为我通常使用功能组件。在这种情况下,我使用了一个类组件,以便我可以通过 DropDownFilter.filterElement() 从实例化的 DropDownFilter 类中访问 filterElement 并用作 Column 组件中的道具。
import React from 'react'
import { MultiSelect } from 'primereact/multiselect';
class DropDownFilter extends React.Component {
constructor(props) {
super(props);
this.multiSelRef = React.createRef();
this.state = {
selectedOptions: [],
}
// Added following two lines trying to fix issue but they did not alter behaviour
this.onOptionsChange = this.onOptionsChange.bind(this)
this.filterElement = this.filterElement.bind(this)
}
onOptionsChange = (e) => {
this.props.dt.current.filter(e.value, this.props.field, 'in');
this.setState({selectedOptions : e.value})
}
filterElement = () => {
return (
<React.Fragment>
<MultiSelect
ref={this.multiSelRef}
value={this.state.selectedOptions} //*** value is null even when selectedOptions has been updated after user chooses option.
// Confirmed by viewing value through multiSelRef
options={this.props.options}
onChange={this.onOptionsChange}
optionLabel="option"
optionValue="option"
className="p-column-filter"
/>
</React.Fragment>
)
}
}
export default DropDownFilter;