首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React重新渲染列表

React重新渲染列表
EN

Stack Overflow用户
提问于 2021-01-07 04:36:44
回答 2查看 36关注 0票数 0

我有一个react页面,上面有几个组件,其中一个状态显示了一个模式。我不希望应用程序中的所有组件在模式显示时重新渲染。

代码语言:javascript
复制
const CustomersPage = () => {
  const [showModal, setShowModal] = useState(false);
  const dataSource = [...omitted data]

  return (
    <>
      <Modal
        visible={showModal} />

      <div>
        <div>
          <div>
            <Button type="primary" onClick={() => setShowModal(true)}>
              Create 
            </Button>
          </div>

          <CustomForm />
        </div>

        <CustomList dataSource={dataSource} />
      </div>
    </>
  );
};

当showModal值改变时,组件CustomForm组件和CustomList组件将重新呈现,但我不希望它们在每次显示模式时都重新呈现,因为列表可以包含超过100个组件。我该怎么做呢?

编辑。

代码语言:javascript
复制
const CustomList = ({ dataSource }) => {
  return (
    <div>
      {dataSource?.map(i => (
        <CustomCard
          id={i.id}
          ...other props
        />
      ))}
    </div>
  );
};

const CustomCard = ({
  ... props
}) => {

  return (
    <>
      <Card
       ...omitted properties
      </Card>
    </>
  );
};
EN

回答 2

Stack Overflow用户

发布于 2021-01-07 04:39:55

您可以将列表和表单组件包装在React.memo组件中。

这样,只有当他们的道具改变他们的身份时,他们才会重新渲染。

请参见:

https://scotch.io/tutorials/react-166-reactmemo-for-functional-components-rendering-control

票数 0
EN

Stack Overflow用户

发布于 2021-01-07 04:47:26

如果您使用FC,则可以避免使用诸如useMemouseCallback之类的备忘录和钩子进行不必要的重新渲染。或者,如果你在CC中,你可以创建你的组件,避免不必要的渲染。

通过用Reaact.memo包装组件来使您的函数组件备注,这样将有助于检查和呈现组件是否在此子组件中有任何更改。尽管有像、useCallback、这样的钩子,但对优化也很有帮助。

有很多文章都是关于这些钩子的用例的,去看看吧。他们真的很有用。

谢谢

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

https://stackoverflow.com/questions/65603049

复制
相关文章

相似问题

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