[英]React children re-render when className changed
当父级的 className 发生变化时,React 子级会重新渲染。
import React from 'react';
import { useSelector } from 'react-redux';
import items from './ItemsList.js';
import Item from './Item';
import './style.scss';
export default () => {
const isDisabled = useSelector((state) => state.Items.isDisabled);
return (
<div className={`container items-container col ${isDisabled ? 'disabled' : ''}`}>
<div className="row items">
{items.map((obj) => (
// All these items re-renders, when parent container className changed
<Item key={obj.id} obj={obj} />
))}
</div>
</div>
);
};
当isDisabled
更改为true
并且disabled
样式附加到父container
,子Item
元素会重新呈现。
如何在不重新渲染子元素的情况下将样式/类名附加到父元素?
对于您提到的真实情况,实际上只有一件事发生,那就是isDisabled
是该父组件的状态属性。
由于您正在使用 Redux 并调用useSelector((state)=>{})
,这实际上将 AppState 绑定到组件状态。 所以从概念上讲,通过使用useSelector()
您将isDisabled
视为状态属性。 按照 React 的约定,任何状态发生变化的组件都必须重新渲染。 所以在你的情况下, parent
实际上正在重新渲染。
这是一个重要的引用,它解决了 Hooks 文档中的所有问题:
选择器大约相当于
mapStateToProps
参数以在概念上进行连接
以下是一些参考资料,可帮助您更深入地了解该主题:
解决了我将React.memo
添加到子项组件的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.