react-virtualized: Calling scrollToRow() on List no longer works after updating React to v16.4.1

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.

What is the current behavior?

Calling scrollToRow() no longer scrolls to the right row. In fact, it doesn’t seem to be doing anything anymore.

What is the expected behavior?

It should scroll to the row given by the index.

Which versions of React and react-virtualized, and which browser / OS are affected by this issue? Did this work in previous versions of react-virtualized?

Browser Chrome v67
OS OSX 10.13.6
React 16.4.1
React DOM 16.4.1
react-virtualized 9.20.1

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Reactions: 8
  • Comments: 20 (3 by maintainers)

Most upvoted comments

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.

How to reproduce

I’m finely reproduced this issue. Only with MultiGrid, but the problem is the same. If you use combination of WindowScroller, AutoSizer and 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)

please try the latest version! https://www.npmjs.com/package/react-virtualized/v/9.22.2

It’s not fixed for me.

Will investigate!