Skip to content
⚠️ This article was written in 2022. Some content may be outdated.

Vite SSR Data Fetching

Vite SSR data fetching has evolved quickly in recent years. This article digs into how it works and how to apply it in practice.

Basic Concepts ​

We can implement it like this:

javascript
// 工具函数封装
function createHandler(options = {}) {
  const { timeout = 5000, retries = 3 } = options

  return async function execute(url, data) {
    for (let attempt = 0; attempt < retries; attempt++) {
      try {
        const controller = new AbortController()
        const timer = setTimeout(() => controller.abort(), timeout)
        const res = await fetch(url, {
          method: 'POST',
          body: JSON.stringify(data),
          signal: controller.signal
        })
        clearTimeout(timer)
        return await res.json()
      } catch (err) {
        if (attempt === retries - 1) throw err
      }
    }
  }
}

With this pattern, the code's maintainability improves.

Core Implementation ​

See the following code for specific usage:

javascript
// 核心实现
const processData = (input) => {
  return input
    .filter(item => item.active)
    .map(item => ({
      ...item,
      displayName: item.name.trim(),
      timestamp: Date.now()
    }))
    .sort((a, b) => b.timestamp - a.timestamp)
}

It is recommended to unify conventions within the team to reduce inconsistency.

Practical Application ​

Let's look at the specific implementation:

javascript
// 使用示例
import { createApp } from './app'

const config = {
  apiBase: process.env.API_BASE || '/api',
  timeout: 10000,
  retries: 3
}

const app = createApp(config)
app.mount('#root')

This implementation is concise and efficient, suitable for most scenarios.

Best Practices ​

Here is a practical example:

javascript
// 工具函数封装
function createHandler(options = {}) {
  const { timeout = 5000, retries = 3 } = options

  return async function execute(url, data) {
    for (let attempt = 0; attempt < retries; attempt++) {
      try {
        const controller = new AbortController()
        const timer = setTimeout(() => controller.abort(), timeout)
        const res = await fetch(url, {
          method: 'POST',
          body: JSON.stringify(data),
          signal: controller.signal
        })
        clearTimeout(timer)
        return await res.json()
      } catch (err) {
        if (attempt === retries - 1) throw err
      }
    }
  }
}

In real projects, you need to make appropriate adjustments based on specific requirements.

Common Issues ​

The core code is as follows:

javascript
// 核心实现
const processData = (input) => {
  return input
    .filter(item => item.active)
    .map(item => ({
      ...item,
      displayName: item.name.trim(),
      timestamp: Date.now()
    }))
    .sort((a, b) => b.timestamp - a.timestamp)
}

Be sure to handle edge cases and exceptions properly.

Summary ​

  • Keep an eye on community developments and update the technical approach in time
  • Base performance optimization on real data and avoid premature optimization
  • The core of Vite SSR data fetching is understanding the underlying principles, not just memorizing APIs
  • In real projects, choosing the right solution matters more than chasing the newest technology

MIT Licensed