reactjs 当特定 prop 改变时防止重新渲染

z9gpfhce  于 2023-05-28  发布在  React
关注(0)|答案(3)|浏览(246)

我有一个可重用的组件,它需要一个editable prop ,可以从外部切换。问题是,无论何时激活该切换,整个组件都会重新呈现,包括只应调用一次的API调用。如果特定的prop editable发生了变化,我该如何防止重新渲染?或者说解决这个问题的方法是什么?
我想得到的是,无论editable属性改变多少次,组件中的API调用都只会得到一次。我如何才能做到这一点?
代码如下:

export const EditableTableList: React.FC<EditableTableListProps> = React.memo(({ columns, editEnabled, keyName, getData, sendChangeToParent }) => {
...
// THIS RERENDERS EVERYTIME EDITABLE CHANGES
  useEffect(() => {
    const getTableData = async () => {
      setLoadedData(false);
      setOriginalData(await getData());
      setLoadedData(true);
    }

    getTableData();
  }, [getData]);
...
}
wgx48brx

wgx48brx1#

getData()将在每次父组件重新呈现时重新呈现,您可以将其作为useCallback函数表达式发送,以便即使父组件重新呈现,它也会保持相同的标识。

eagi6jfj

eagi6jfj2#

这个效果再次执行只是因为你的getData函数发生了变化--也许不是它的内容,但肯定是示例/引用。
你必须在你的父组件中记住它,例如使用useCallback。如果你提供了父组件,我可以给予你一个例子。

az31mfrm

az31mfrm3#

通过从依赖数组中删除getData,可以解决此问题。但要回答这个问题:
当特定 prop 改变时防止重新渲染
您可以通过以下方式解决此问题。

function Hello() {
   return <div>component code goes here</div>
}
export default React.memo(Hello, (oldProps, newProps) => {
  return oldProps.prop1 !== newProps.prop1;
})

相关问题