reactjs - React Hooks - 如何避免在每次渲染时重新声明函数

标签 reactjs react-hooks

在 react 课上我会写这样的东西

class Myclass extends React.Component {
  handleUpdate = info => {
    //do the update
  }

  render() {
    return (
      <SomeMarkup>
        <SomeComponent onUpdate={this.handleUpdate} />
      </SomeMarkup>
    )
  }
}

如果使用函数,我可以编写以下内容

function MyFunction() {
  function handleUpdate(info) {
    // do the update
  }
  return (
    <SomeMarkup>
      <SomeComponent onUpdate={handleUpdate} />
    </SomeMarkup>
  )
}

...但是这样我就会在每次渲染时重新声明一个函数。是否有任何技巧可以记住渲染之间的处理程序函数?或者我应该将处理程序移出渲染范围? (将其移出渲染范围需要我显式传递更多参数,因为我无法直接访问函数范围。)

最佳答案

这正是 useCallback 的场景是为了.该函数仍然每次使用 useCallback 进行声明,但返回的函数会被内存,因此,如果将其作为属性传递给子级,则子级将收到一致的函数,除非它由于依赖关系而必须更改改变。

请参阅我最近的相关答案,其中详细演示了 useCallback 的工作原理: Trouble with simple example of React Hooks useCallback

这是另一个相关答案:React Hooks useCallback causes child to re-render

关于reactjs - React Hooks - 如何避免在每次渲染时重新声明函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54934975/

相关文章:

javascript - 如何获取 const MyContext = React.createContext();对于 React js 中的其他组件

javascript - 如何使用 React 测试库测试 HTML 内容

javascript - 仅当 Prop 更改时,如何在自定义钩子(Hook)中触发useEffect?

javascript - React hooks useEffect 即使在 [] 作为 deps 的情况下运行

reactjs - useSWR 未加载数据。数据保持加载状态

javascript - 如何从自定义 react 钩子(Hook)丰富数据

reactjs - 如何使用 react-router 从哈希 URL 获取参数?

javascript - redux-saga 注入(inject)两次

javascript - 看不到更新状态

javascript - React Hooks 可以有方法吗?