Не позволяйте инструментам React dev изменять реквизит / состояние

Есть ли способ предотвратить какие-либо изменения пропеллера / состояния от переднего плана на производстве?

Я попробовал следующее, но это полностью отключает инструменты dev:

if (typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === 'object') {
  for (let [ key, value ] of Object.entries(
    window.__REACT_DEVTOOLS_GLOBAL_HOOK__
  )) {
     window.__REACT_DEVTOOLS_GLOBAL_HOOK__[key] =
       typeof value === 'function' ? () => {} : null;
  }
}    

2 ответа

Я использую следующий фрагмент кода в моем приложении Meteor, которое использует React 16.3 в качестве библиотеки пользовательского интерфейса.

window.__ALLOW_REACT_DEVTOOLS__ это просто флаг, который я установил в html SSR, отправляемом с сервера, потому что эта строка кода должна исключать любой код React, и он мне нужен раньше process.env доступно в браузере. На сервере я установил это значение на false в производстве.

<script>
  if (
    !window.__ALLOW_REACT_DEVTOOLS__ &&
    window.__REACT_DEVTOOLS_GLOBAL_HOOK__ &&
    typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === "object"
  ) {
    for (let [key, value] of Object.entries(window.__REACT_DEVTOOLS_GLOBAL_HOOK__)) {
      window.__REACT_DEVTOOLS_GLOBAL_HOOK__[key] = typeof value == "function" ? ()=>{} : null;
    }
  }

  delete window.__ALLOW_REACT_DEVTOOLS__;
</script>

Ключом к выполнению этой работы является то, что она загружается ДО React.

Это полностью отключит React-Devtools. Когда вы нажимаете на вкладку devtools, она просто скажет "Looking for React...".

Хорошо, нашел способ не дать даже этой функции быть введённой / вовлечённой.

Я просто изменил код блокировки:

// отключаем реакцию-инструменты для этого проекта

 if (typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === "object") {
        for (let [key, value] of Object.entries(window.__REACT_DEVTOOLS_GLOBAL_HOOK__)) {
            window.__REACT_DEVTOOLS_GLOBAL_HOOK__[key] = typeof value == "function" ? ()=>{} : null;
        }
    }
Другие вопросы по тегам