Re-renders are triggered by state, props, context changes, or force updates.
Re-render doesn't always mean DOM changes because React uses the virtual DOM to compare changes and optimize updates.
You can optimize re-renders using React.memo, shouldComponentUpdate, and the useMemo/useCallback hooks.