首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-window,如何防止状态改变时重新渲染列表?

React-window,如何防止状态改变时重新渲染列表?
EN

Stack Overflow用户
提问于 2020-05-30 12:48:34
回答 2查看 2.2K关注 0票数 1

这是我的代码沙箱示例:https://codesandbox.io/s/react-hooks-counter-demo-kevxp?file=/src/index.js

我的问题是:列表总是会在页面内的每个状态变化时重新呈现,所以滚动总是会回到顶部。我想知道为什么会发生这种情况,以及如何防止这种行为,即使列表的状态发生变化,然后保持列表的最后一个滚动位置

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-30 13:02:05

我不认为这是react窗口的问题。

react组件重新呈现,因为存在状态更改。在本例中,状态更改是由setCount (当您单击增量按钮时)引起的,它会重新呈现包括Example在内的整个组件。

如果Example是它自己的组件,滚动位置将不会被刷新,因为它不再依赖于计数状态。

下面是一个可用的示例:https://codesandbox.io/s/react-hooks-counter-demo-hbek7?file=/src/index.js

票数 1
EN

Stack Overflow用户

发布于 2020-05-30 12:58:45

每次呈现App时,您都在为Example组件创建一个全新的定义。它可能和旧的做同样的事情,但它是一个新的组件。因此react将来自一次渲染的元素与下一次渲染的元素进行比较,并发现它们具有不同的组件类型。因此,它被迫卸载旧的并挂载新的,就像您将某些东西从<div>更改为<span>一样。新的开始滚动到0。

这个问题的解决方案是在App之外只创建一次示例。

代码语言:javascript
复制
const Example = props => (
  <List
    className="List"
    height={80}
    itemCount={props.propsAbc.length}
    itemSize={20}
    width={300}
    itemData={{
      dataAbc: props.propsAbc
    }}
  >
    {({ index, style, data }) => (
      <div className={index % 2 ? "ListItemOdd" : "ListItemEven"} style={style}>
        {data.dataAbc[index]}
      </div>
    )}
  </List>
);

function App() {
  const [count, setCount] = useState(0);
  let [dataArray, setDataArray] = useState([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

  return (
    <div className="App">
      <h1>Scroll down the blue box, then click the button</h1>
      <h2>You clicked {count} times!</h2>

      <button onClick={() => setCount(count - 1)}>Decrement</button>
      <button onClick={() => setCount(count + 1)}>Increment</button>

      <div
        style={{ maxHeight: "80px", overflow: "äuto", background: "lightblue" }}
      >
        <Example propsAbc={dataArray} />
      </div>
    </div>
  );
}

https://codesandbox.io/s/react-hooks-counter-demo-qcjgj

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62097956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档