ingred-ui icon indicating copy to clipboard operation
ingred-ui copied to clipboard

<DataTable />のonSelectRowsChangeの参照が変わると無限レンダリングする

Open youchann opened this issue 4 years ago • 2 comments

  const [selectedRowIds, setSelectedRowIds] = React.useState<Set<number>>(
    new Set<number>(),
  );

  const onHandleSelectRowsChange = (rowIds: number[]) => {
    setSelectedRowIds(new Set<number>(rowIds));
  };

return (
  <DataTable
    onSelectRowsChange={onHandleSelectRowsChange}
  />
)
  1. <DataTable />内部のuseEffectonSelectRowsChange()が発火
  2. selectedRowIdsが変更される
  3. 再レンダリングの影響でonHandleSelectRowsChangeの参照が変わる
  4. 1に戻る

利用側でuseCallback()を使えば済む話だが、使わなくても無問題な実装にしたい。

youchann avatar Oct 08 '20 02:10 youchann

そもそも<DataTable />でstateを持たないように努めれば良い気もしている(選択された項目に関しては

youchann avatar Oct 08 '20 02:10 youchann

https://github.com/voyagegroup/ingred-ui/issues/182 で解決できる

youchann avatar Sep 30 '22 06:09 youchann

https://github.com/voyagegroup/ingred-ui/pull/1120 で解決できていそうなので close する。 リリースはまだ。

takurinton avatar Feb 06 '23 00:02 takurinton