Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以告诉useMemo跳过其依赖项数组中的空值吗?_Javascript_Reactjs_Typescript_React Native_React Hooks - Fatal编程技术网

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

Javascript 我可以告诉useMemo跳过其依赖项数组中的空值吗?,javascript,reactjs,typescript,react-native,react-hooks,Javascript,Reactjs,Typescript,React Native,React Hooks,我有一个useMemo钩子,它包装了一个组件,该组件只需要在其道具具有特定形状时重新渲染(不能为null,并且必须包含timestamp属性) 在下面的示例中,我的布局道具可能有不同的值,如null、{timestamp:1,…}、null……等等 我的目标是利用useMemo,仅当布局有时间戳时才允许组件重新渲染,否则它必须返回已记忆的组件 import React, { useMemo } from "react"; export default ({layout})

我有一个useMemo钩子,它包装了一个组件,该组件只需要在其道具具有特定形状时重新渲染(不能为null,并且必须包含timestamp属性)

在下面的示例中,我的布局道具可能有不同的值,如null、{timestamp:1,…}、null……等等

我的目标是利用useMemo,仅当布局有时间戳时才允许组件重新渲染,否则它必须返回已记忆的组件

import React, { useMemo } from "react";

export default ({layout}) => {
  const {timestamp} = layout || {};
  return useMemo(() => <div>current state: {timestamp}</div>, [timestamp]);
}
import React,{usemo}来自“React”;
导出默认值({layout})=>{
常量{timestamp}=layout | |{};
返回useMemo(()=>当前状态:{timestamp},[timestamp]);
}

您可以从
usemo

import React, { useMemo } from "react";

export default ({layout}) => {
  const {timestamp} = layout || {};
  return timeStamp && <div>current state: {timestamp}</div>;
}
import React,{usemo}来自“React”;
导出默认值({layout})=>{
常量{timestamp}=layout | |{};
返回时间戳和当前状态:{timeStamp};
}
作为替代,您可以使用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;
})
import React,{memo}来自“React”;
导出默认备忘录({layout})=>{
常量{timestamp}=layout | |{};
返回useMemo(()=>时间戳和当前状态:{timestamp},[timestamp]);
},(prevProps,newProps)=>{
const prevLayout=prevProps.layout | |{};
const layout=newProps.layout | |{};
if(layout.timestamp==prevLayout.timerstamp)返回true;
返回false;
})

我认为OP希望结果是前一个值
timestamp
,当它变为
null
@NikitaMadeev时,您可能是对的,但如果是这样的话,则无论如何都要记住perforned@ShubhamKhatri谢谢,但当它遇到空时间戳时,它抛出组件(…):渲染没有返回任何内容。我正在检查react.memo而不是useMemo,看它是否有效。@nostromo821我用memo方法更新了帖子