我尝试将isRowSelectable
作为 prop 动态传递给AgGridReact
。在下面的玩具示例中,您希望单击"切换条件"按钮将更改网格中具有复选框的项目集,但实际上网格没有更改。
截图:
interface Item { name: string, age: number, height: number}
const data: Item[] = [
{name: "old and tall", age: 80, height: 80},
{name: "old and short", age: 80, height: 20},
{name: "young and tall", age: 10, height: 80},
{name: "young and short", age: 10, height: 20},
]
const colDefs: ColDef[] = [
{
headerName: "",
checkboxSelection: true,
headerCheckboxSelection: true,
headerCheckboxSelectionFilteredOnly: true,
width: 60,
sortable: false
},
{ field: "name"},
{ field: "age"},
{ field: "height"}
]
const criteria1 = (node: RowNode) => node.data.age > 50
const criteria2 = (node: RowNode) => node.data.height > 50
export const DevPage: FunctionComponent = () => {
const [isCriteria1, setIsCriteria1] = useState<boolean>(false)
return ( <Fragment>
<h2> {isCriteria1 ? "By Age" : "By Height"} </h2>
<Button onClick = { () => setIsCriteria1(!isCriteria1) }>
Switch criteria
</Button>
<div className="ag-theme-alpine" style={{height:"800px"}}>
<AgGridReact
rowSelection="multiple"
columnDefs = {colDefs}
rowData={data}
isRowSelectable = {isCriteria1 ? criteria1 : criteria2}
suppressRowClickSelection={true}
/>
</div>
</Fragment> )
}
2条答案
按热度按时间pieyvz9o1#
作为一种解决方法,您可以强制所有
RowNode
在onClick
事件触发时重新计算selectable属性。现场演示
v1uwarro2#
这是AG网格问题。当
isRowSelectable
函数发生变化时,AG网格(使用28.2.1测试)未刷新状态。您可以通过
setRowSelectable
函数强制设置行可选在NearHuscarl方法的分支下,声明了对
useCallback
和useState
函数的React依赖性。现场演示
enter link description here