【问题标题】:Axios with firebase does not return the data while putting it带有firebase的axios在放置数据时不返回数据
【发布时间】:2020-09-24 11:42:04
【问题描述】:

我正在使用 Axios 使用 React 和 Firebase 制作一个调查工具,现在我正在尝试制作一个模板功能,其中我创建了一些存储在 firebase 中的调查模板,现在当用户想要访问我的模板时能够以 json 格式获取模板,但我也无法将其复制到他们的帐户中。

这是我用来获取调查模板的代码

const fetchSurvey = async () => {
  const res = await axios.get(
    "/surveys/ckb0kmt3n000e3g5rmjnfw4go/content/questions.json"
  );
  console.log(res.data);
};

其中“ckb0kmt3n000e3g5rmjnfw4go”是调查 ID,当我这样做时,数据成功登录到控制台,但是当我使用此模板创建新调查时:

const fetchSurvey = async () => {
  const res = await axios.get(
    "/surveys/ckb0kmt3n000e3g5rmjnfw4go/content/questions.json"
  );
  return res.data
};
const content = {
  title: "Your Survey Title",
  subTitle: "Your Survey Description",
  creatorDate: new Date(),
  lastModified: new Date(),
  questions: fetchSurvey(),
  submitting: true
};
this.setState({
  _id: newId(),
  content: content,
  userId: this.props.user_Id
});


}



    clickHandler = () => {
        const newSurvey = { ...this.state };
        axios
          .put(
            "/surveys/" + this.state._id + ".json?auth=" + this.props.token,
            newSurvey
          )
          .then(res => {
            this.props.onGetSurveyId(res.data._id);
          })
          .catch(error => {
            console.log(error);
          });
      };

在此之后,确实创建了调查,但问题键将丢失并且不会呈现任何问题。请帮助我

【问题讨论】:

    标签: javascript reactjs asynchronous firebase-realtime-database axios


    【解决方案1】:
    const content = {
      ...
      questions: fetchSurvey(),
      ...
    };
    
    this.setState({
      ...
      content: content,
      ...
    });
    

    那是行不通的。 questions: fetchSurvey(), 计算结果为 Promise<any> 你必须在回调中设置状态

    componentDidMount() {
      fetchSurvey()
        .then(questions => {
          // either update existing state or create everything there when you get questions
          this.setState(state => ({
            ...state,
            content: {
              ...state.content,
              questions
            }
          }));
      })
    }
    
    

    【讨论】:

    • 感谢您的回答!但我仍然不明白它是如何工作的,或者我应该把它放在哪里,如果我能更清楚一点,那就太好了:)
    • 我还有一个问题,希望您能帮助我
    【解决方案2】:

    如果你想从 firebase 获取数据,你应该使用 firebase 的实例来查询,比如 firestore 或实时数据库。

    Firestore 查询教程: https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document

    实时数据库教程: https://firebase.google.com/docs/database/web/read-and-write#read_data_once

    【讨论】:

    • 好吧,我正在使用 Firebase Rest API,我不需要强制使用 firebase 实例,Axios 可以完美运行!
    • 你需要传递一个完整的 url 有域、路径、参数、.. 的 api 你可以设置一个 baseUrl 到 axios 全局配置以通过:github.com/axios/axios#axioscreateconfig
    • 我已经在 axios-order.js 中创建了所有这些,并且基本路径已经设置为我的 firebase 凭据,代码中的错误接近内容:Józef 解释的 fetchSurvey()波德莱基
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2021-12-13
    • 1970-01-01
    • 2020-07-07
    • 2018-09-16
    • 2018-02-25
    • 2020-12-07
    相关资源
    最近更新 更多