我有一个React.memo组件,我只想在发送第二个参数isEqual函数时属性不变的情况下呈现它。当我console.log包装器组件和memmoized组件时,我可以看到它是用相同的道具呈现的。我做错了什么?
我的包装器组件
export const WrapperComponent= props => {
console.log('MemoizeComponent', props);
return (
<MemoizeComponent name="memo"/>
);
}
export const WrapperComponent;我的memmoized组件
export const Component = props => {
console.log('component: ', props.name)
return (
<div>{props.name}</div>
);
}
function isEqual(prevProps, nextProps) {
console.log(prevProps.name);
console.log(nextProps.name);
return prevProps.name === nextProps.name;
};
export const MemoizeComponent = React.memo(Component, isEqual);控制台输出:
memo
memo
component:memo
memo
memo
component:memo发布于 2019-11-27 20:49:12
不确定您的问题是什么,但您的代码可以正常工作:
const { useState, memo, useRef } = React;
const useRendered = () => {
const rendered = useRef(0);
rendered.current++;
return rendered.current;
};
function App() {
const [, setRender] = useState();
const rendered = useRendered();
return (
<div>
<div>rendered {rendered} times</div>
<button onClick={() => setRender({})}>
re render
</button>
<WrapperComponent name="memo" />
</div>
);
}
const WrapperComponent = props => {
return <MemoizeComponent name="memo" />;
};
const Component = props => {
const rendered = useRendered();
return (
<div>
{props.name} rendered {rendered} times
</div>
);
};
function isEqual(prevProps, nextProps) {
return prevProps.name === nextProps.name;
}
const MemoizeComponent = memo(Component, isEqual);
ReactDOM.render(<App />, document.getElementById('root'));<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>
https://stackoverflow.com/questions/59070140
复制相似问题