как-то на основе prevItems:
setItems( prevItems => ??? )
Я сейчас создаю новый newItems и потом setItems(newItems), интересует, есть ли способ не перезаписывать весь state-массив
после перезапуска страницы она исчезает. Но страница не обновляется
setItems( prevItems => ({ ...prevItems, newValue: value }) )
А если у нас массив объектов и нужно изменить свойство в каждом?
Т.е. возвращать полностью новый state?
setState все равно вызовет ререндер, да
Стейт имутабелен, даже изменив одно значение в массиве - стейт перезапишется новым массивом.
Не совсем согласен, возвращается копия данных с минимальными изменениями в свойствах, иначе не было бы смысла в применении spread/Object.assign, поправьте, если ошибаюсь.
производится ререндер на основе нового стейта, полный ререндер, даже если вы в объекте одно свойство поменяли
Ну полный ререндер не должен произойти, из-за применения shadow DOM (поправьте, если не прав)
shadow dom это про веб компоненты, и я плохо в нем разбираюсь, в реакте virtual dom
Смысл в нашем удобстве, а минимальные или нет изменения неважно, стейт всегда получает новое значение, объект или массив
Virtual DOM вы имели в виду, скорее всего)
во-первых, virtual DOM, а не shadow во-вторых, зависит от реализации connect-функции
connect функция это уже редакс.
сорян, потерял контекст 🤷♂️
у вас есть компонент, у компонента меняется стейт, или меняются пропсы, происходит ререндер
держи - const ThemeContext = React.createContext('rerender');
толсто, провайдера нету.
Обсуждают сегодня