Бесконечный Цикл - Реагирует Native useState useEffect - PullRequest
0 голосов
/ 25 октября 2019

Я новичок в хуках и у меня сложилось впечатление, что useEffect запускается только один раз при загрузке страницы. Я устанавливаю переменную состояния интересов в возвращаемом отклике firebase, но она попадает в бесконечный цикл. Почему это происходит? Насколько я понимаю, метод firebase .once должен извлекать данные только один раз.

const ProfileCardScreen = ({navigation}) => {
    const user = navigation.getParam('user');
    const [interests, setInterests] = useState([]);

    const getUserProfileData = () => {
        var userId = user.uid;
        firebase.database().ref('/Users/' + userId).once('value').then(function(snapshot) {
            var interests = (snapshot.val() && snapshot.val().interests);
            Object.keys(interests).map(function(key) {
                setInterests(interests);
              });
        });
    };

    useEffect(() => {
        getUserProfileData();
    });

1 Ответ

1 голос
/ 25 октября 2019

Да, вы можете использовать useEffect () для запуска чего-либо, как только страница загрузится. Однако для этого вам нужно добавить второй аргумент, в данном случае пустой массив, который будет запускаться только при монтировании и размонтировании (в противном случае он также запускается при обновлении).

То есть, он должен выглядетькак это:

useEffect(() => {
    getUserProfileData();
}, []);

Примечание: добавив переменную состояния в пустой массив (например: [myState]), вы создадите прослушиватель для этого состояния. В этом случае useEffect будет работать как функция didUpdate только для этого состояния.

...