【发布时间】:2019-05-07 10:21:15
【问题描述】:
Foo 是一个应该只渲染一次的组件。这可以用于性能优化,尽管这只是纯粹的理论问题,没有解决任何特定的编码问题。
这可以通过使用shouldComponentUpdate或纯组件来实现,这是一个推荐的方法:
const Foo = () => <p>{Math.random()}</p>;
const FooOnce = React.memo(Foo);
const Bar = () => {
const [, update] = useState();
useEffect(() => {
setTimeout(() => {
update({});
}, 500);
}, []);
return <>
<FooOnce/>
</>;
};
或者通过保留对 React 元素对象的引用并重用它:
const fooOnce = <Foo/>;
const Bar = () => {
const [, update] = useState();
useEffect(() => {
setTimeout(() => {
update({});
}, 500);
}, []);
return <>
{fooOnce}
</>;
};
重用元素对象时不会重新渲染组件是直观的,但我从自己的经验中知道这一点,而不是从官方来源。这可能会导致createElement 调用少于纯组件,因此这可能被认为是一个好处。
所有 React 版本中都记录和预期这种行为吗?
是否有理由不以这种方式重用元素来防止组件更新?
【问题讨论】:
-
为什么要确保组件不会被重新渲染?这通常意味着您正在尝试强制执行某些操作,并且通常在 React 中有更好的方法来实现这一点
-
@Aron 这个问题没有针对具体案例。我想这可以用作优化技术。
标签: reactjs