Почему отправка моей формы при нарушении развертывания (React + Firestore)? - PullRequest
0 голосов
/ 03 мая 2018

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

onSubmit = () => {
    firebase.auth().onAuthStateChanged((user) => {
        const { phoneNumber, points } = this.state;
        let pointsToAdd = Number(points);
        if(user) {
            const docRef = database.collection('users').doc(user.uid).collection('customers').doc(phoneNumber);
            docRef.set({
                points: pointsToAdd
            })
            .then(() => {
                console.log('success');
            })
            .catch((error) => {
                console.log(error);
            });
        } else {
            window.location.href = '/';
        }
    });
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Полагаю, вы не вошли в среду, отличную от dev, текущая реализация просто перенаправит пользователя, когда пользователь не найден.

Как отзыв о вашем текущем обработчике отправки: я думаю, что вы хотите слушать authStateChanged, когда ваши компоненты монтируются, а не когда вызывается обработчик отправки. Обновите состояние соответствующим образом и используйте пользователя из состояния при поиске нужного документа.

Например:

componentDidMount () {
  this.unsubscribe = firebase.auth().onAuthStateChanged((user) => {
    if (user) this.setState({ user })
    else window.location.href = '/'
  })
}

componentWillUnmount () {
  this.unsubscribe() // don't forget to unsubscribe when unmounting!
}

onSubmit = () => {
  const { phoneNumber, points, user } = this.state;
  let pointsToAdd = Number(points);

  database.collection('users').doc(user.uid).collection('customers').doc(phoneNumber)
    .set({
      points: pointsToAdd
    })
    .then(() => {
      console.log('success');
    })
    .catch((error) => {
      console.log(error);
    });
}
0 голосов
/ 03 мая 2018

Если это обновление, тогда пользовательская переменная равна нулю. Таким образом, вы не должны входить в развернутую версию. Просто добавьте функцию входа в Firebase, прежде чем вызывать ее!

https://firebase.google.com/docs/auth/web/password-auth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...