I'm trying to reduce unnecessary rendering in child components. When a child component trigger a state modification all others unaffected components get re-rendered (in virtual DOM of course). I'm using React.memo but if I let the comparison to React.memo the renders are the same as if I wasn't using it.
To investigate the problem I tried to console.log the props.
The first component render a list of components based on props and on a template from another file.
const List = props => { return ( <div id="List"> {template[props.status].map( el => <ListItem activeClass={props.active === el.type ? 'active' : ''} handleClick={props.handleClick} key={el.type} itemType={el.type} text={el.text} /> ) } </div> ) } I'm starting using memo in the ListItem component
const ListItem = React.memo( props => { return ( <button className={props.activeClass} onClick={props.handleClick} title={props.itemType} value={props.itemType} > {props.text} </button> ) }, (prevProps, nextProps) => { prevProps === nextProps }; Whit this I get the same renders as if I wasn't using React.memo, so I console.log every single props.
prevProps === nextProps //false prevProps.itemType === nextProps.itemType //true prevProps.text === nextProps.text //true prevProps.handleClick === nextProps.handleClick //true prevProps.activeClass === nextProps.activeClass //true handleClick is from an hook and I used useCallback to get always the same reference, I don't have other props so I don't know why
prevProps === nextProps is still false. This happens in others child components, so I don't want to add a custom function in every one of them, what should I check next to ensure that prevProps === nextProps is true?