如何保存我最近用 axios 创建的 firebase 中的数据并做出反应?

Posted

技术标签:

【中文标题】如何保存我最近用 axios 创建的 firebase 中的数据并做出反应?【英文标题】:how to save the data from firebase I recently Created with axios and react? 【发布时间】:2021-06-18 05:54:20 【问题描述】:

我对 react 和 web 开发整体来说还是个新手,我想问一下,我的问题出在哪里? 我用firebase创建了一个数据库,发布到里面很顺利,但是现在我试图获取我之前发布的日期并将其存储到一个变量中,这样我就可以遍历数据并为每个数据映射不同的组件。我用的是axios,代码如下:

function CreateBlog(props) 
   const [fetchedData, setFetchedData] = useState();
    useEffect(() => 
          axios.get("https://diary-page-default-rtdb.firebaseio.com/diaryPages.json")
        .then((response) => 
            console.log(response.data);
            setFetchedData(response.data);
            console.log(fetchedData)
        )
        .catch(error => console.log("error occured:", error))
    , []);

所以当我 console.log 响应.data 时,我得到了带有存储在数据库中的数据的对象,但是当我 setFetchData 和 console.log 时,我得到了未定义的 fechedData。是否有任何简单的方法将“fetchedData”中的数据存储为数组,其中每个不同的对象都代表数组的一部分,以便稍后我可以映射数组并将数据显示在单独的组件中?

【问题讨论】:

【参考方案1】:

您正在正确存储数据,但由于useState 异步操作,您无法立即对其进行控制台记录。

如果您想控制台记录您的fetchedData,请使用 useEffect 监听该状态的变化(用于演示目的):

useEffect(() => 
  console.log(fetchedData)
, [fetchedData]);

我将给出的进一步建议(虽然不是必需的)是将您的初始状态设置为空数组,因为这是您要存储的数据类型:

const [fetchedData, setFetchedData] = useState([]);

从这里,您可以像这样映射您的数据:

fetchedData?.map((data, index) => <div key=index>data</div>

如果您复制我的示例,请确保 data 不是对象,否则它将返回错误,因为您无法在 jsx 中显示对象

【讨论】:

以上是关于如何保存我最近用 axios 创建的 firebase 中的数据并做出反应?的主要内容,如果未能解决你的问题,请参考以下文章

create-react-app创建react项目,使用axios跨域

使用 Axios 获取并保存 Excel 文件

Axios 如何取消已发送的请求?

用 PHP Rest API 反应 axios,如何编写 baseurl [重复]

在Vue中如何使用axios跨域访问数据

在Vue中如何使用axios跨域访问数据(转)