this.state.message null не является объектом

#javascript #node.js #react-native

#javascript #node.js #реагировать-родной

Вопрос:

Я пытаюсь поместить свой ответ из моего бэк-энда в мое представление. Но когда я помещаю свое this.state.message, у меня появляется ошибка «null не является объектом this.state.message».

Это часть моего представления

 </View>
          <View style={{flex:1}}><Text style={{color:'white', textAlign:'center'}}>{this.state.message}</Text></View>
        </View>
 

А также мой серверный

 connexion: (req, res, next) => {
    const verifEmail = RegExp("([A-z]|[0-9]) @([A-z]|[0-9]) .[A-z]{2,3}");
    const email = req.body.email;

    if (
      verifEmail.test(email) == false ||
      typeof req.body.password != "string" /**check des formats emails et pwd */
    ) {
      res.status(417);
      res.json({
        message:
          "Saisie incorrects. Veuillez ressaisir vos identifiants et mot de passe.",
      });
    } else {
      /*comparaison email user et base de donnée si match ou pas */
      User.findOne({ email: req.body.email }, (err, data) => {
        if (!data) {
          return res
            .status(401)
            .json({ message: "Identifiant et/ou Mot de passe incorrects" });
        }
        bcrypt.compare(req.body.password, data.password, (err, result) => {
          if (err) {
            console.log(err);
            res.status(500).json({
              message: "une erreur s'est produite",
            }); /*erreur de saisie ou autre err*/
          } else if (!data || !result) {
            res.status(401).json({
              message:
                "Identifiant et/ou Mot de passe incorrects" /*donnée ne matche pas avec database*/,
            });
          } else {
            res.json({
              club: data.club,
              userId: data._id,
              token: jwt.sign({ userId: data._id }, "RANDOM_TOKEN_SECRET", {
                expiresIn: "24h",
                /*durée de validité du Token, l'utilisateur devra se reconnecter au bout de 24h*/
              }),
              message: "Connexion Réussie !" /*good password */,
            });
          }
        });
      });
    }
  },

 

У меня есть то же самое для моего представления subscription, и оно работает. Я не понимаю, почему это не работает для моего представления входа.

Комментарии:

1. как вы запрашиваете серверную часть / обновляете состояние на интерфейсе?

Ответ №1:

используйте этот пример кода для получения данных с сервера в первую очередь :

   fetch(url   'ApiService/test', {
            method: 'Post',
            headers: {
              Accept: 'application/json',
              'Content-Type': 'application/json',
                   },
            body: JSON.stringify(res),
          }).then((response) => response.json())
            .then((responseJson) => {
              console.log("responseJson: " responseJson);
              this.setstate({message: responseJson.message});

}
 

затем сначала проверьте console.log("responseJson: " responseJson); правильность полученных вами данных с сервера.
затем используйте this.setstate({message: responseJson.message}); для набора данных для вашего состояния. Я надеюсь, что это полезно.