Что такое StrictMode
и почему нужно его использовать
StrictMode
(строгий режим) - это инструмент для выделения потенциальных проблем в приложении. Он активирует дополнительные проверки и предупреждения.
StrictMode
не отображает ничего визуального (похожего на Fragment), но обнаруживает потенциальные проблемы в коде и даёт полезные предупреждения. Строгий режим работает только в режиме разработки (development) и не влияет на сборку. С появлением Hooks
и Concurrent Mode
(параллельный режим), который не за горами, строгий режим становится всё более важным инструментом для обнаружения плохих практик (параллельный режим, вероятно, не будет работать, пока не исправишь предупреждения, выдаваемые в строгом режиме).
StrictMode
помогает обнаружить:
- Устаревший код и устаревшие API;
- Небезопасные методы жизненного цикла;
- Неожиданные побочные эффекты.
Устаревший код и устаревшие API
Как и всё остальное, что сделано из кода, React со временем меняется, и то, что когда-то считалось современным, в конечном итоге становится устаревшим и заменяется. Например, findDOMNode
, который устарел в строгом режиме и, возможно, будет удален в будущей версии React. Другими примерами являются использование String Refs и устаревшего context API, которые вызывают некоторые “проблемы”.
Небезопасные методы жизненного цикла
Начиная с версии 16.9 React выдаёт предупреждение при использовании любого из методов жизненного цикла componentWillMount
, componentWillReceiveProps
и componentWillUpdate
. Надеюсь, что ты уже преобразовал эти методы в более безопасные альтернативы (если нет, тебе следует как минимум добавить префикс «UNSAFE_»). Строгий режим может помочь определить небезопасные методы жизненного цикла в собственном коде и в сторонних библиотеках, а также предложит альтернативу.
Неожиданные побочные эффекты
В Concurrent
Mode React может запускать метод рендеринга несколько раз, прежде чем вносить изменения (например, изменить DOM). Поэтому важно, чтобы этот метод не содержал побочных эффектов, которые могут привести к утечкам памяти и неверному состоянию. Строгий режим не может обнаружить побочные эффекты автоматически. Но он использует хоть простой, но умный трюк - методы constructor, render, setState и getDerivedStateFromProps запускаются дважды, тем самым облегчая обнаружение побочных эффектов. Если это приводит к какому-либо странному поведению в приложении, ты знаешь, что искать.
Как использовать Strict Mode
Самый простой способ - обернуть весь компонент приложения в <React.StrictMode>
</React.StrictMode>
в файле index.js:
import React from "react";
import ReactDOM from "react-dom";
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
);
Также, можно его использовать, обернув один или несколько компонентов:
import React from "react";
class Hello extends React.Component {
render() {
return (
<div>
<React.StrictMode>...</React.StrictMode>
</div>
);
}
}
Представленный в версии React 16.3 в марте 2018 года StrictMode
, не оказывает никакого влияния на production, поэтому ты всегда можешь оставить его в коде. При разработке он будет показывать полезные предупреждения в консоле браузера.