从getInitialProps返回内容时,是否有检查空的方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从getInitialProps返回内容时,是否有检查空的方法?相关的知识,希望对你有一定的参考价值。

我是React&NextJS的新手,来自php语言。这对我来说非常有趣和令人兴奋 - 但还未能掌握这一部分。

你能在getInitialProps中检查空吗?例如,如果API关闭或API未返回任何结果,则显示错误消息?

原谅我发布我的代码,但这里是......

import App, { Container } from 'next/app';
import Layout from '../components/Layout'; 
import Footer from '../components/Footer';
import 'isomorphic-fetch'; // Library for fetching data 
import Link from 'next/link';
import {Jumbotron, Button, Row} from 'reactstrap';

export default class Index extends React.Component {
  static async getInitialProps() {

        // Connect to the API
        const ApiResponse = await fetch('http://localhost:1337/mods')

       // Store the data fetched from ApiResponse
       const ModsData = await ApiResponse.json()

        // return mods (first is table name in API, second is the ModsData variable above where we store the json data)
        return {
          mods: ModsData

        }


  }
  render() {
    return <Layout>



     <span style={{borderBottom: '1px solid #ccc', paddingBottom: '5pt', marginTop: '5pt'}}>

     <h4 style={{paddingTop: '10pt'}}>Showing all mods</h4>
     </span>

      <ul className="list-group" style={{paddingTop: '10pt'}}> 
        {this.props.mods.map(Mod => // Get our mods & loop over them
       <li className="list-group-item" key={Mod.id}>
        <Link as={`/mods/${Mod.id}`} prefetch href={`/mods/id=${Mod.id}`}><a>

        {Mod.name}</a></Link>
        {Mod.description}

        </li>

        )}
        </ul>
    </Layout>
  }
}
答案

只需添加另一个道具noData,并检查ModsData是否返回任何东西,如果没有添加noData: true其他noData: false

    static async getInitialProps() {
        let noData = false
        // Connect to the API
        const ApiResponse = await fetch('http://localhost:1337/mods').then((value) => {
            if(!value) noData = true;
        }).catch(err => {
            noData = true;
        })

       // Store the data fetched from ApiResponse
       const ModsData = await ApiResponse.json()

        // return mods (first is table name in API, second is the ModsData variable above where we store the json data)
        return {
          mods: ModsData,
          noData
        }
  }

 render(){
      if(this.props.noData) return <h1>No Data</h1>

      //return other code
  }
另一答案

尝试和捕获是完美的这个权利?如果错误,您可以将error设置为道具的一部分

以上是关于从getInitialProps返回内容时,是否有检查空的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如果直接从 index.js 调用,Nexjs getStaticProps / getInitialProps 通过工作返回未定义的组件

Next.js:在 getInitialProps() 中获取数据:服务器端与客户端

Next.js - 理解 getInitialProps

如何从 getInitialProps 中的 url 获取查询参数?

使用 next.js 和 Parse Server 在 getInitialProps 内重定向

将 Next.js 与 next-redux-wrapper 一起使用时,getInitialProps 似乎不起作用