I have a fairly complicated app where this issue is occurring, so it is not so easy to include a simple example showing the problem. Essentially what I am doing is calling
this._pdfView.getWrappedInstance().list.scrollToRow(index);
where this._pdfView is a ref to a connected component (hence the getWrappedInstance() call), which in turn has a getter to access the ref to a List component. I use a combination of WindowScroller, AutoSizer and List. _Important to note is that this is an issue specifically with React v16.4.1. If I revert to React v16.3.0 everything works like expected_.
If this information is not sufficient, I will try to attach a minimal example that reproduces the problem. I understand that otherwise it will be difficult for you to track down the problem.
Calling scrollToRow() no longer scrolls to the right row. In fact, it doesn't seem to be doing anything anymore.
It should scroll to the row given by the index.
| | |
|-------------------|----------|
| Browser | Chrome v67 |
| OS | OSX 10.13.6 |
| React | 16.4.1 |
| React DOM | 16.4.1 |
| react-virtualized | 9.20.1 |
Have same problem too, but with scrollToCellin Grid. It is working with 16.3, but breaks on >=16.4.
I'm using MultiGridwrapped in AutoSizerand call scrollToCelllike this:
this._grid._bottomRightGrid.scrollToCell({columnIndex, rowIndex})
I've spent some time in debugger and noticed, that setState on this line is not updating Grid's state (scrollTop/scrollLeft fields):
https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/Grid.js#L1528
It seems setStatereturns previous cache of the state and not updating it.
I'm finely reproduced this issue. Only with MultiGrid, but the problem is the same. If you use combination of WindowScroller, AutoSizerand List/Grid - you should get the same result.
Working example. React 16.3: https://codesandbox.io/s/llq660v04l
Broken after updating to React 16.4.1: https://codesandbox.io/s/1v4r4nqpz4
Change values in input with label _Scroll to column_ or _Scroll to row_. In the first example it will scroll to specified column, but nothing will happen if we update React to 16.4.1 (second example)
Hi,
I have the same problem with the scrollToPosition and React 16.4.
Here is what I have found:
A bug fix has been done on React 16.4 on the getDerivedStateFromProps, see https://reactjs.org/blog/2018/05/23/react-v-16-4.html#bugfix-for-getderivedstatefromprops
The important part is:
getDerivedStateFromProps is now called every time a component is rendered, regardless of the cause of the update. Previously, it was only called if the component was re-rendered by its parent, and would not fire as the result of a local setState.
Here is the code from React Virtualized Grid in the getDerivedStateFromProps
https://github.com/bvaughn/react-virtualized/blob/c646a62eb3f7aebdfe648bb71cb87545af4d3a9b/source/Grid/Grid.js#L839-L845
The nextProps.scrollTop always erase the new value of prevState.scrollTop because it's not anymore the previous state but the new one.
I've made a PR which should fix this issue.
Has this regressed for anyone else? It looks like it got backed out in #1446.
Will investigate!
Facing similar issues with scroll to index / scroll to row
I just noticed that in my case, I'm going from react/react-dom 16.8.6 -> 16.12.0 and hitting the issue -- not 16.3 -> 16.4 like the original rerporter. Makes me wonder if there's a new issue that has come up.
EDIT: Turns out my testing was invalid. This most recently broke with the 9.21.2 release, regardless of React version. See also https://github.com/bvaughn/react-virtualized/issues/1226
(Deleted... user error :-D My widget that customizes Virtualized table wasn't sending a prop for scrollToRow)
@wuweiweiwu were you able to track this down at all?
@mozbhearsum
NOT Working with WindowScroller
For my case, I tested it works when NOT using the window scroller (for both scrollToRow and scrollToPosition),
while it doesn't work when using with WindowScroller.
"react": "^16.8.5",
"react-dom": "^16.8.5",
"react-virtualized": "^9.21.2"
@mozbhearsum
NOT Working with WindowScroller
For my case, I tested it works when NOT using the window scroller (for both scrollToRow and scrollToPosition),
while it doesn't work when using with WindowScroller."react": "^16.8.5", "react-dom": "^16.8.5", "react-virtualized": "^9.21.2"
Yeah it's still not working with WindowScroller
@mozbhearsum
NOT Working with WindowScroller
For my case, I tested it works when NOT using the window scroller (for both scrollToRow and scrollToPosition),
while it doesn't work when using with WindowScroller."react": "^16.8.5", "react-dom": "^16.8.5", "react-virtualized": "^9.21.2"
Doesn't work for me. I haven't tried any workarounds, though.
@mozbhearsum
NOT Working with WindowScroller
For my case, I tested it works when NOT using the window scroller (for both scrollToRow and scrollToPosition),
while it doesn't work when using with WindowScroller."react": "^16.8.5", "react-dom": "^16.8.5", "react-virtualized": "^9.21.2"
I opened another issue for that https://github.com/bvaughn/react-virtualized/issues/1507
Any updates on this?
Any updates on this?
+1
This still doesn't work. I've moved out from react virtualized to react window.
please try the latest version! https://www.npmjs.com/package/react-virtualized/v/9.22.2
please try the latest version! https://www.npmjs.com/package/react-virtualized/v/9.22.2
It's not fixed for me.
My quick workaround was like that:
https://github.com/bvaughn/react-virtualized/issues/1507#issuecomment-683547612
Most helpful comment
Hi,
I have the same problem with the
scrollToPositionand React 16.4.Here is what I have found:
A bug fix has been done on React 16.4 on the
getDerivedStateFromProps, see https://reactjs.org/blog/2018/05/23/react-v-16-4.html#bugfix-for-getderivedstatefrompropsThe important part is:
Here is the code from React Virtualized Grid in the
getDerivedStateFromPropshttps://github.com/bvaughn/react-virtualized/blob/c646a62eb3f7aebdfe648bb71cb87545af4d3a9b/source/Grid/Grid.js#L839-L845
The
nextProps.scrollTopalways erase the new value ofprevState.scrollTopbecause it's not anymore the previous state but the new one.