Javascript 我可以告诉useMemo跳过其依赖项数组中的空值吗?
我有一个useMemo钩子,它包装了一个组件,该组件只需要在其道具具有特定形状时重新渲染(不能为null,并且必须包含timestamp属性) 在下面的示例中,我的布局道具可能有不同的值,如null、{timestamp:1,…}、null……等等 我的目标是利用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})
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方法更新了帖子