diff --git a/docs/web/README.md b/docs/web/README.md index 53e2491d283fd80f0e1dfea5be3adcf815d38ba1..757666b051d802aa20b103bc51fdb08a078cbc8e 100644 --- a/docs/web/README.md +++ b/docs/web/README.md @@ -187,7 +187,7 @@ uni相关的异步api在web端不传回调时会返回promise(详情参考:[ - [x] 国际化 - [x] 地图 - [x] uni-push2.0 -- [ ] 服务端渲染 +- [x] 服务端渲染 新增于HBuilderX 4.18 - [ ] [接口Promise化](https://uniapp.dcloud.net.cn/api/#api-promise-%E5%8C%96) ## 运行与发行 diff --git a/docs/web/ssr.md b/docs/web/ssr.md index 86aab88768c562add600e941258600d76ebd83fd..e73763ef2b0ed036788f50909cfcb15ba5bb0199 100644 --- a/docs/web/ssr.md +++ b/docs/web/ssr.md @@ -1,5 +1,7 @@ ## 使用ssr +> 新增于 HBuilderX 4.18 + uni-app 默认情况下,是在客户端中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序。 服务器渲染的 uni-app 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行。 @@ -42,33 +44,33 @@ export default defineConfig({ **示例** ```ts - - - ``` @@ -77,7 +79,7 @@ export default defineConfig({ 对于简单的需要云端客户端保持一致的数据可以使用uni-app提供的ssrRef及shallowSsrRef实现 ```ts -const categories = ssrRef(['c1', 'c2'], 'categories'); +const categories = ssrRef(['c1', 'c2'], 'categories'); export default { data() { return { @@ -94,100 +96,100 @@ export default { **main.uts** ```ts -import { createSSRApp } from 'vue' -import App from './App.uvue' -import createStore from './store' -export function createApp() { - const app = createSSRApp(App) - - const store = createStore() // 创建 store - app.use(store) - - return { - app, - store,// 必须返回 store - } +import { createSSRApp } from 'vue' +import App from './App.uvue' +import createStore from './store' +export function createApp() { + const app = createSSRApp(App) + + const store = createStore() // 创建 store + app.use(store) + + return { + app, + store,// 必须返回 store + } } ``` **store/index.uts** ```ts -import { createStore } from 'vuex' - -// 模拟接口获取数据 -function fetchItem(id) { - return new Promise((resolve) => { - setTimeout(() => { - resolve({ - id, - title: 'title' + id, - }) - }, 300) - }) -} - -export default () => { - return createStore({ - state() { - return { - items: {}, - } - }, - actions: { - fetchItem({ commit }, id) { - return fetchItem(id).then((item) => { - commit('setItem', { id, item }) - }) - }, - }, - mutations: { - setItem(state, { id, item }) { - state.items[id] = item - }, - }, - }) +import { createStore } from 'vuex' + +// 模拟接口获取数据 +function fetchItem(id) { + return new Promise((resolve) => { + setTimeout(() => { + resolve({ + id, + title: 'title' + id, + }) + }, 300) + }) +} + +export default () => { + return createStore({ + state() { + return { + items: {}, + } + }, + actions: { + fetchItem({ commit }, id) { + return fetchItem(id).then((item) => { + commit('setItem', { id, item }) + }) + }, + }, + mutations: { + setItem(state, { id, item }) { + state.items[id] = item + }, + }, + }) } ``` **pages/index/index.uvue** ```vue - + ``` @@ -201,7 +203,7 @@ uni-app-x内page-meta仅保留了存放head的功能,page-meta内的head节点 - + ``` @@ -210,26 +212,26 @@ uni-app-x内page-meta仅保留了存放head的功能,page-meta内的head节点 使用此功能需要确保项目`index.html`内head下有head-meta注释。如下: ```html - - - - - - - - - - - -
- - + + + + + + + + + + + +
+ + ```