防止setState重新呈现整个功能组件

时间:2019-12-02 13:11:39

标签: reactjs

在类组件中,更改状态或道具后,将执行render方法,但是我不知道在功能组件中,当同一情况发生时,哪一部分代码将被重新渲染?

2 个答案:

答案 0 :(得分:1)

如果您要跳过的组件中有一些昂贵的计算,则可以使用useMemo hook。它将第一次进行计算,然后在随后的几次中,仅当其中一个依赖项发生更改时才重新计算。例如:

import React, { useMemo } from 'react';

const Example = ({ people }) => {
  const [ageFilter, ageFilter] = useState(10);
  const filteredPeople = useMemo({
    return people.filter(person => person.age >= ageFilter);
  }, [people, ageFilter]);

  return (
    <div>
      {filteredList.map(person=> (
        // some components
      ))}
    </div>
  )
}

答案 1 :(得分:0)

如果给定相同的道具,功能组件呈现相同的结果,则可以使用React.memo。同样,React为类组件提供了PureComponent

它在React doc中被提及:

  

如果函数组件在相同条件下呈现相同结果   道具,您可以将其包装在对React.memo的调用中以提高性能   在某些情况下,通过记忆结果。这意味着React将跳过   渲染组件,然后重用最后渲染的结果。

因此,您需要使用React.memo