Сообщество RSS DEV

За пределами распространения: `structuredClone` против `{ ...obj }` — Тактики глубокого копирования, которые каждый инженер React + TypeScript должен освоить

В React неизменяемость является ключевым фактором, требующим копий объектов для обновлений вместо прямой мутации. Хотя оператор spread обеспечивает неглубокое копирование, это может привести к проблемам с глубоко вложенными структурами данных. `structuredClone` предлагает нативное браузерное решение для глубокого копирования. Оператор spread копирует поля первого уровня по значению, а вложенные объекты копируются по ссылке. Это подходит для плоского состояния или когда вложенные объекты немедленно перезаписываются. `structuredClone` рекурсивно копирует различные типы данных, включая Maps и Sets, но отбрасывает экземпляры классов и функции. Тестирование производительности показывает, что оператор spread быстрее для плоских объектов, а `structuredClone` медленнее, но обеспечивает полное копирование. Для паттернов React неглубокого копирования часто бывает достаточно для локального обновления состояния. Однако `structuredClone` полезен для создания моментальных снимков состояния в тяжелых формах или для функциональности отмены. При работе со сложными структурами данных могут быть полезны собственные методы клонирования или библиотеки вроде Immer. `structuredClone` справляется с круговыми ссылками, но будет выдавать ошибки для функций или узлов DOM. Выбор между spread и `structuredClone` зависит от потребности в корректности и микрооптимизации.
favicon
dev.to
Beyond the Spread: **`structuredClone`** vs `{ ...obj }` — Deep-Copy Tactics Every React + TypeScript Engineer Should Master
Изображение к статье: За пределами распространения: `structuredClone` против `{ ...obj }` — Тактики глубокого копирования, которые каждый инженер React + TypeScript должен освоить
Create attached notes ...