0

I have the following structure, and I don't know why it doesn't work.

Concept is transferring data from table to table. My structure is "A table" - "data Center" - "B table".

Here's my "data Center" code first

  const [selectedRows, setSelectedRows] = useState<String[]>([])
  const [transferedRows, setTransferedRows] = useState<String[]>([])

  const onClick = () => {
    onTransfer()
    //it works, when set empty array in here
    // setSelectedRows([])
  }

  const onTransfer = () => {
    const clone = _.cloneDeep(selectedRows)
    const merge = [...clone, ...transferedRows]
    
    restApi.call() //something rest api
    .then((response) => {
        if (response.result) {
          updateState(merge)
        } else {
          throw new Error()
        }
      })
  }

  const updateState = (merge: String[]) => {
    let data = _.cloneDeep(merge)
    data.map(()=>{...})
    
    selectedRows.map((item) => (...))

    setTransferedRows(data)
    //not working here, not update state immediately
    setSelectedRows([])
   }
...
return (
<>
<BTable
      ...
      selectedRows={selectedRows}
      setSelectedRows={setSelectedRows}
/>
</>

BTable code is here

  useEffect(() => {
    if (selectedRows.length === 0) {
      setSelectedRowKeys([])
    }
  }, [selectedRows])

I want to set selectedRows to be empty when onclick event is triggered.

It works when I setSelectedRows([]) on "onclick" function, but doesn't work on "updateState" function.

Anyone can explain why setSelectedRows([]) not working on "updateState" function?

skyboyer
  • 22,209
  • 7
  • 57
  • 64
Chloe
  • 161
  • 3
  • 14
  • this might help https://stackoverflow.com/questions/50648505/react-2-setstate-in-same-function-second-one-erase-the-first – uditkumar01 Aug 24 '22 at 13:26
  • what does `setSelectedRowKeys` do, what does mean "immediately"? – skyboyer Aug 25 '22 at 21:06
  • State is never updated "immediately"; setting state is an asynchronous process. Unrelated, but it's unclear what `map` is used for in `updateState` since the results are thrown away--if you're not using the returned array `forEach`/etc. might be more clear. – Dave Newton Aug 25 '22 at 21:08
  • @DaveNewton thanks for your advice. I used `map` to update data's some value. but, as you suggest, it seems more clear to use `forEach`. – Chloe Aug 26 '22 at 04:10
  • @skyboyer `setSelectedRowKeys` for monitoring checkbox is check/unchecked. – Chloe Aug 26 '22 at 04:12

0 Answers0