nextjs 怎么发请求获取数据

用next框架开发了一段时间,讲一下next怎么发起请求获取从服务器获取数据

一。页面首次打开请求数据

自己封装的next请求封装库 有兴趣的小伙伴可以看一下

import React from 'react';
import { getTopicsApi } from '../../util/service'; // 自己封装的请求

class Demo extends React.Components {

  // 第二种写法
  static getInitialProps() {
    // ...
  }

  render() {
    const { topicsList } = this.props // 通过props获取
    return (
      <div>demo{topicsList}</div>
    )
  }

}
// 第一种写法
Demo.getInitialProps = async function() {
  const options = {
    page: 1,
    size: 10
  }
  const res = await getTopicsApi(options);
  return {
    topicsList: res
  };
};

export default Demo

这种方法获取数据是在服务端完成,通过打开network查看元素发现,整个页面时包括数据生成的页面结构都是一次性返回的。这样的好处是有利于seo优化,百度爬虫能抓取到页面的内容。 这是估计有小伙伴会问了,我要通过点击一些按钮又要发送请求要怎么发?

二。页面动态请求数据

import React from 'react';
import { getTopicsApi } from '../../util/service'; // 自己封装的请求

class Demo extends React.Components {

  state = {
    list: []
  }

  // 第二种写法
  static getInitialProps() {
    // ...
  }

  componentDidMount() {
    this.setState(old => ({
      list: this.props.topicsList
    }))
  }

  async getList() {
    const options = {
      page: 2,
      size: 10
    }
    const res = await getTopicsApi(options);
    this.setState(old => ({
      list: res
    }))
  }

  render() {
    const { topicsList } = this.props // 通过props获取
    return (
      <div>
        demo{topicsList}
        <button onClick={this.getList.bind(this)}>点我啊</button>  
      </div>
    )
  }

}
// 第一种写法
Demo.getInitialProps = async function() {
  const options = {
    page: 1,
    size: 10
  }
  const res = await getTopicsApi(options);
  return {
    topicsList: res
  };
};

export default Demo

这种方法获取数据是在浏览器完成的,跟用spa单页面应用请求数据的形式是一样,熟悉的感觉又回来了~

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A:在 Next.js起 HTTP 请求可以使用内置的 `fetch` API 或第三方库如 `axios` 或 `isomorphic-unfetch`。不建议使用 `request` 库,因为它是一个 Node.js 特定的库,可能不兼容客户端 JavaScript 运行环境。 使用 `fetch` API 起 HTTP 请求的示例代码如下: ```js import fetch from 'isomorphic-unfetch' // 存储响应数据的对象 const data = { error: null, response: null } // 起 GET 请求 fetch('https://example.com/data') .then(res => { // 解析响应体为 JSON 格式 return res.json() }) .then(json => { // 存储响应数据 data.response = json }) .catch(err => { // 存储错误信息 data.error = err }) ``` 上述例子中,我们使用 `isomorphic-unfetch` 库导入了 `fetch` 函数,并使用它起了一个 GET 请求。我们将响应数据存储在一个名为 `data` 的对象中,以便稍后处理。在 `then` 块中,我们解析了响应体并将其转换为 JSON 格式,然后将其存储在 `data` 对象中。在 `catch` 块中,我们处理了任何可能生的错误并将错误信息存储在 `data` 对象中。 需要注意的是,在服务器端(即 Next.js 应用程序的构建和运行环境)中,`fetch` 函数是一个全局对象。但在客户端(即 Web 浏览器中)中,`fetch` 函数是由浏览器提供的全局对象。因此,如果使用 `fetch` 函数起 HTTP 请求时,需要在代码中使用条件分支语句,以便在客户端和服务器端正确使用 `fetch` 函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值