为了账号安全,请及时绑定邮箱和手机立即绑定

在反应组件安装之前加载 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 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信