текущего стейта (который является объектом) без деструктуризации (создания нового инстанса объекта со старыми данными + измененными данными) ? То есть фактически менять значение в стейте, а не весь объект стейта на новый инстанс. А нужно для того, чтобы не ререндерить если не поменялось ничего, кроме самого инстанса объекта, значения внутри такие же.
Useref
Если тебе не нужен рендер так можно использовать useRef
Ну да, это если ререндеринга вообще не нужно. А мне нужен, но не тогда, когда меняется сущность объекта, а тогда, когда внутри него что-то меняется. Видимо без создания копий объектов - никак. А в таком случае остаётся - проверять равно или не равно значение к текущему значения внутри объекта, в стейте. Дабы не делать копии постоянно с теми же значениями, а реакт думает, что стейт поменялся и ререндерит.
А можешь скинуть пример кода?
Да в прицнипе любой случай где в стейте храним объект а не примитив. setState({...someObject, someData: true}) - это будет вызывать ререндер всегда, даже если в стейте флаг someData уже равен true. Только проверку ставить на текущее значение, перед вызовом.
Посмотри в сторону useReducer это стандартный хук. Но у него есть нюанс, если ты возращаешь ссылку та тот же Стейт то рендера не произойдет
Ну так просто проверь свойства так if(currentState.value != newValue){ setState({...currentState, value:newValue}) }
Да, просто думал есть вариант присвоить к текущему объекту и чтобы это реакт нормально "съел".
Обсуждают сегодня