2017-02-22 20 views
0

Я хочу отключить refb firebase, когда пользователь меняет вид в приложении с одной страницей. Когда пользователь меняет вид, я хочу получить новый ref для firebase, так как мне нужны только отфильтрованные данные, и каждое представление фильтрует разные данные.Реакция: Отключение refb firebase на компонентеWillUnMount

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

Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op.

Эта ошибка ссылается на другой вид как он пытается обновить отключенный компонент. Это не должно произошло потому, что Закройте ref на компонентеWillUnMount.

В обоих видах я следующий код для получения нового реф:

componentDidMount() { 
    // I have declared this.ref on the constructor so I can call off() on componentWillUnMount 
    this.ref = firebase.database().ref().child('mainNode').orderByChild('someProperty').equalTo('someValue'); 

    this.ref.on('value', (snap) => { 
     let values = []; 
     snap.forEach((child) => { 
     let value = child.val(); 
     let key = child.key; 
     const valueWithKey = update(value, {$merge: {key}}); 
     values.push(valueWithKey); 
     }); 
     // This is the offending line 
     this.setState({data: values}); 
    }); 
    } 

А вот мой componentWillUnMount код:

componentWillUnMount() { 
    this.ref.off(); 
    // I have also tried goOffline() 
} 

Что я делаю неправильно?

ответ

0

Как выясняется, правильный крючок жизненного цикла называется componentWillUnmount, а не componentWillUnMount, что заставляет React не выполнять функцию.