Разница между компонентом и элементом в ReactJS
- Компонент React (компонент класса или компонент функции) — это, по сути, функция, которая принимает некоторые входные параметры и возвращает элемент React.
- элемент в React — это выходные данные, возвращаемые компонентом. Мы можем создать несколько элементов одного и того же компонента, каждый из которых будет иметь разные свойства.
Проще говоря, компонент — это фабрика по созданию элементов.
// AnimalInfo is a component const AnimalInfo = ({name}) => <p>{name}</p> // PuppyInfo and KittyInfo are elements const PuppyInfo = <AnimalInfo name='puppy' /> const KittyInfo = <AnimalInfo name='kitty' />
В сравнении:
// true const isEqual = AnimalInfo === AnimalInfo // false const isEqual = <AnimalInfo name='puppy'/> === <AnimalInfo name='puppy'/>
Несмотря на одинаковые реквизиты, каждый элемент в приведенном выше коде является отдельным экземпляром компонента AnimalInfo
.
Упрощенная версия:
const createAnimal = name => { return { name } } const animal_1 = createAnimal('foo') const animal_2 = createAnimal('foo') // false const isEqual = animal_1 === animal_2
Повторное использование элемента для оптимизации приложения React
Если мы сможем идентифицировать несколько одинаковых элементов, мы сможем выделить их в один элемент и повторно использовать в приложении.
НЕ ОПТИМИЗИРОВАНО ❌
const list = [0, 1, 2, ..., 100] // 100 items // in this loop, we create 100 elements with the same props const PuppyList = () => { return list.map(item => ( <> <AnimalInfo name='puppy' /> </> ) } const AnimalInfo = ({name}) => <p>{name}</p>
ОПТИМИЗИРОВАНО ✅ извлекать в один элемент и использовать его повторно
// we only initiate 1 element and reuse it in the entire loop const PuppyList = () => { const Puppy = <AnimalInfo name='puppy' /> return list.map(item => ( <> {Puppy} </> ) }