亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在反應組件安裝之前加載 cms 內容

在反應組件安裝之前加載 cms 內容

慕容森 2021-11-25 19:39:34
我想將我的帖子從 ButterCMS 導入 React,但我不知道如何處理異步問題。import React, { useState } from "react"import Butter from "buttercms"import gradient from "../../images/TealLove.jpg"export default () => {  const butter = Butter("API_KEY")  const [post, setPost] = useState()  butter.post.list({ page: 1, page_size: 10 }).then(function(response) {    setPost(response.data.data[0])  })  return (    <>      <div className={"section"}>        <div className={"container"}>          <div className={"first-post"}>            <figure className={"image"}>              <img src={gradient} alt=""></img>            </figure>            <div className={"first-post-title"}>              <h2>                {post.title.length > 20                  ? post.title.slice(0, 85) + " ..."                  : post.title}              </h2>            </div>          </div>        </div>      </div>    </>  )}每次我運行這個,錯誤post is undefined都會出現。如何僅在定義帖子后才呈現元素?
查看完整描述

1 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

您始終可以在渲染之前進行檢查并渲染后備加載指示器..


return (

    post ?

      <div className={"section"}>

        <div className={"container"}>

          <div className={"first-post"}>

            <div className={"first-post-title"}>

              <h2>

                {post.title.length > 20

                  ? post.title.slice(0, 85) + " ..."

                  : post.title}

              </h2>

            </div>

          </div>

        </div>

      </div>

  : "loading..."

  )

上面的代碼僅在定義后才加載 post,否則返回“loading”。


在useEffect鉤子內部,您可以調用 API 并設置狀態。


  useEffect(() => {

      fetch("URL")

        .then(response => response.json())

        .then(json => setPost(json));

  }, [])

API 調用完成后,狀態會發生變化,并且組件會使用發布數據重新呈現。


一個例子https://stackblitz.com/edit/react-htofev


查看完整回答
反對 回復 2021-11-25
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號