Предупреждение: isMounted (...) устарел в простых классах Javascript

Я реализую 2 экрана с помощью реакции-навигации. Но при переходе на вторую страницу я получил предупреждение ниже:

Warning: isMounted(...) is deprecated in plain Javascript Classes. Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.

Версии:

  • реагировать: 16.3.1
  • реагировать-родной: 0.55.2
  • реагировать-навигация: 1.5.11
  • Утилита: 0.10.3

Login.js

import React, { Component } from 'react';
import { Text, View, Image, TextInput, TouchableOpacity } from 'react-native';
import styles from "./styles";

export default class Login extends Component {
    constructor(props) {
    super(props);
}

render() {
    const { navigate } = this.props.navigation;     
    return (
        <View style = {styles.container}>         
            <View style = {styles.formContainer}>                 
                <TouchableOpacity style = {styles.button} onPress = {()=> navigate('Home')} >
                    <Text style = {styles.buttonText}>LOGIN</Text>
                </TouchableOpacity>
            </View>
        </View>
    )
}

Home.js

import React, { Component } from 'react';
import { Text, View } from 'react-native';
import styles from "./styles";

export default class Home extends Component {
    constructor(props) {
        super(props);
    }
    render() {
        const { navigate } = this.props.navigation;
        return(
            <View style = {styles.container}>         
                <Text>Home Screen</Text>
            </View>
        )
    }
}

Что мне здесь не хватает?

Судя по всему, вы установили старый модуль, который, вероятно, вызывает устаревший метод isMounted. Попробуйте удалять их по одному, пока предупреждение не исчезнет. Думаю, это react-navigation. Вы пробовали установить последнюю версию?

Ray 12.04.2018 08:20

Да, я обновил все 4 модуля до последней версии, но у меня это не сработало. Даже тоже попробовал понизить.

Javascript Hupp Technologies 12.04.2018 08:23

Вы пытались удалить их по одному? Кроме того, есть ли у вас другие страницы, кроме home.js и login.js?

Ray 12.04.2018 08:25

Нет, у меня нет других страниц, хорошо, позвольте мне попробовать отрендерить домашнюю страницу без навигации.

Javascript Hupp Technologies 12.04.2018 08:27

О да, похоже, проблема с onPress = {()=> navigate('Home')}, потому что при рендеринге домашней страницы по умолчанию без навигации предупреждение исчезает.

Javascript Hupp Technologies 12.04.2018 08:31

Хорошо ... Ваша проблема может быть связана как-то с маршрутизатором, который вы выбрали тогда. Попробуйте использовать другой. Я лично использую react-native-navigation от Wix, но вы также можете использовать react-native-router-flux, если не хотите реализовывать свою навигацию изначально.

Ray 12.04.2018 08:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
32
6
15 212
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Это проблема с последними версиями React Navigation и React Native. Чтобы заставить его замолчать, добавьте:

import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['Warning: isMounted(...) is deprecated', 'Module RCTImageLoader']);

Я ожидаю, что это будет исправлено в React Navigation в течение следующих нескольких недель.

Спасибо, но нет другого решения, кроме как замолчать это предупреждение?

Javascript Hupp Technologies 12.04.2018 09:56

Они утверждают, что проблема не в React Navigation. github.com/react-navigation/react-navigation/issues/3956

Fook 04.05.2018 21:16

Где мне разместить этот код? Не сработало, когда я поместил его в свой компонент App.js. (используя crna cli)

Giesburts 07.05.2018 01:16

поместите его в index.js

AJ Genung 07.05.2018 03:41
github.com/facebook/react-native/issues/18868 из последнего комментария: исправления являются частью нового кандидата на выпуск 0.56.
MoralCode 04.07.2018 08:46

Хотя это решение заглушает сообщение YellowBox, оно, похоже, не влияет на отключение вывода в отладчике, где сообщение повторяется несколько раз в секунду.

Myk Willis 23.10.2018 21:27

Для меня работает следующее решение:

import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['Warning: isMounted(...) is deprecated', 'Module RCTImageLoader']);

Это на самом деле проблема React-Native

Вы можете подождать и проверить, когда будет доступно исправление, здесь: https://github.com/facebook/react-native/issues/18868

А пока вы можете скрыть предупреждение, как предлагается.

Согласно этой проблеме GItHub, она была исправлена ​​в react-native v0.57.0.

Andrew 14.02.2019 01:48

Проблема с реакцией-навигацией закрыта, можете посмотреть здесь

Они заявляют, что это проблема где-то внутри react-native

Да, я смотрел, но факт в том, что предупреждение приходит, когда звонит navigate('page_name')

Javascript Hupp Technologies 03.05.2018 14:54

Это не из react-navigation, поскольку я изучал node_modules, а react-navigation не использует isMounted, он исходит откуда-то из React-Native, Я также сделал тот же хак, который использовал @Romsun

    import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['Warning: isMounted(...) is deprecated', 'Module RCTImageLoader']);

Игнорировать это сообщение - неправильный путь для хорошего разработчика. Если мы устраним эту проблему, то утечка памяти уменьшится.

Ответ очень лаконичный, может быть, это должен быть комментарий? Иногда хотелось бы получить более подробную информацию. Тем не менее, спасибо, так как уменьшение утечек памяти всегда является важной целью.

JosephDoggie 11.05.2018 19:58

@Gajarajan Да, но пока у нас нет другого решения.

Javascript Hupp Technologies 12.05.2018 08:18

Мы должны следить за обсуждением здесь

Javascript Hupp Technologies 12.05.2018 08:19

Если вы используете EXPO для разработки RN, эта проблема теперь исправлена ​​в expo 27.0.2.

См. https://forums.expo.io/t/warnings-after-upgrade-to-expo-27/9579/12

Не могли бы вы включить в свой ответ часть о том, как обновить expo до последней версии? (Использование цитат) Таким образом, будущие посетители этой страницы быстрее найдут решение. Спасибо!

Filnor 23.05.2018 08:36

Для справки, это не ответ только по ссылке. В ответе говорится, что это была ошибка, и она была решена в более поздней версии Expo. Ссылка - это ссылка, подтверждающая это

Zoe 23.05.2018 11:18

Приведенные выше ответы не сработали для меня, но добавление следующего в index.js помогло:

console.ignoreYellowBox = ['Warning: isMounted(...) is deprecated'];

Или обновитесь до expo 27.0.2, который в основном добавляет вышеупомянутое к Expo.js. См. Дополнительную информацию здесь: https://forums.expo.io/t/warnings-after-upgrade-to-expo-27/9579/10

Как указывалось в некоторых других ответах, это проблема react-native, поэтому, надеюсь, она скоро будет исправлена ​​в следующей версии Expo.

Вот что я сделал для этой проблемы на данный момент:

Шаг 1. Нажмите на предупреждение

Шаг 2: В желтом окне нажмите на опцию трассировки стека в правом верхнем углу

Шаг 3: Найдите путь, по которому появилось предупреждение, например: C: \ Users \ username \ projectname \ node_modules \ react \ cjs \ react.development.js

Шаг 4: Откройте путь в редакторе

Шаг 5: Найдите ключевое слово isMounted под устаревшим API и удалите устаревшую функцию и предупреждение, относящиеся к нему.

Шаг 6: Сохраните и перезагрузите приложение !! Вот и все

Если вы используете клиент expo, обновите свою версию до [email protected], что устраняет это предупреждение. . .

Используйте этот оператор в index.js:

import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['Warning: isMounted(...) is deprecated', 'Module RCTImageLoader']);

Другие вопросы по теме