javascript - 我可以告诉 useMemo 跳过其依赖项数组中的空值吗?

标签 javascript reactjs typescript react-native react-hooks

我有一个 useMemo 钩子(Hook),它包装了一个组件,该组件仅在其 prop 具有特定形状时才需要重新渲染(不得为 null 并且必须包含时间戳属性)。

在下面的示例中,我的布局属性可能具有不同的值,例如 null、{timestamp:1, ...}、再次为 null...等。

我的目标是利用 useMemo 允许我的组件仅在布局具有时间戳时重新渲染,否则它必须返回已内存的时间戳。

import React, { useMemo } from "react";

export default ({layout}) => {
  const {timestamp} = layout || {};
  return useMemo(() => <div>current state: {timestamp}</div>, [timestamp]);
}

最佳答案

您可以有条件地从 useMemo 内返回

import React, { useMemo } from "react";

export default ({layout}) => {
  const {timestamp} = layout || {};
  return timeStamp && <div>current state: {timestamp}</div>;
}

作为替代方案,您可以使用 React.memo

import React, { memo } from "react";

export default memo(({layout}) => {
  const {timestamp} = layout || {};
  return useMemo(() => timestamp && <div>current state: {timestamp}</div>, [timestamp]);
}, (prevProps, newProps) => {
   const prevLayout = prevProps.layout || {};
   const layout = newProps.layout || {};
   if(layout.timestamp === prevLayout.timerstamp) return true;
   return false;
})

关于javascript - 我可以告诉 useMemo 跳过其依赖项数组中的空值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62532009/

相关文章:

javascript - TypeError : (0 , _native.createNavigatorFactory) 不是函数

javascript - javascript如何在页面上执行代码

javascript - 为什么 slice 不能直接作用于参数?

typescript - Typescript 的 Rxjs 类型

javascript - TypeScript:错误 TS2339:类型 'CustomEvent' 上不存在属性 'Window'

javascript - 在平台中包含 React 和 React-bootstrap (不是单页应用程序)

javascript - Canvas 未在reactjs中渲染

javascript - 我似乎无法使用react将这些方法传递给我的组件

TypeScript,将多个参数绑定(bind)到同一类型

typescript - 如何将多个源文件传递给 TypeScript 编译器?