【发布时间】:2022-01-12 01:18:06
【问题描述】:
我知道这样做不是一个好的模式,但你会明白我为什么要这样做。
我有一个HTable,它使用第三方库(react-table)
const HTable = <T extends object>({ columns, data, tableInstance}: Props<T>) {
const instance: TableInstance<T> = useTable<T> (
// Parameters
)
React.useImperativeHandle(tableInstance, () => instance);
}
现在,我想从父级控制列的可见性。我做到了:
const Parent = () => {
const [tableInstance, setTableInstance] = React.useState<TableInstance<SaleItem>>();
<Table data={data} columns={columns} tableInstance={(instance) => setTableInstance(instance)}
return tableInstance.columns.map((column) => {
<Toggle active={column.isVisible} onClick={() =>column.toggleHiden()}
}
}
该列隐藏得很好,但状态没有更新,切换也没有,我不明白为什么。你能帮我理解吗?
编辑:
添加沙盒。
https://codesandbox.io/s/react-table-imperative-ref-forked-dilx3?file=/src/App.js
请注意,我不能使用 React.forwardRef,因为我使用 typescript,如果我使用 forwardRef,React.forwardRef 不允许这样的泛型类型
interface TableProps<T extends object> {
data: T[],
columns: Column<T>[],
tableInstance?: React.RefObject<TableInstance<T>>,
}
【问题讨论】:
-
看起来您发布的代码 sn-ps 有点混乱。你能纠正这些吗?另外,当您单击 Toggle 时,您能否确认您的 Parent 中的 tableInstance 已重新设置? - 如果您能提供一个我们可以测试的示例,也会很有帮助!
-
我添加了一个沙箱。注意第二个复选框没有更新。
标签: reactjs react-hooks ref