Существует 2 основные стадии, которым следует уделять пристальное внимание, когда речь заходит о производительности в React
:
- первоначальный рендеринг (
initial rendering
) — происходит, когда компонент впервые появляется на экране; - ререндеринг — второй и последующие рендеринги компонента.
Ререндер состояния (re-render) происходит, когда происходит изменение состояния компонента или когда компонент получает новые свойства (props). Изменения состояния влекут за собой безусловный (непредотвращаемый) ререндеринг.
_Существует 5 причин, по которым компонент подвергается ререндерингу:
- изменение состояния,
- ререндеринг родительского компонента,
- изменение контекста,
- изменение хука,
- принудительный вызов forceUpdate()**.
Существует распространенный миф о том, что ререндеринг происходит также при изменении пропсов - это не так.
Принудительный вызов forceUpdate
возможен также и для функциональных компонентов, но для этого нужно смоделировать ситуацию следующим образом:
const [, forceUpdate] = useReducer((x) => x + 1, 0)
const handleClick = () => {
setValue((v) => Object.assign(v, { "new-field": "new-field-value" }))
forceUpdate
}
Можно написать кастомный хук на forceUpdate
= useForceUpdate()