[英]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.