简介

Demo Block 用于帮助你在编写文档时增加 vue ,react, 原生js 示例。在编写组件文档时,通常需要在文档上增加一些相关的示例,这些示例通常可以使用 JSFiddle 或 Codepen 的 Iframe 实现,但是维护成本会相对比较高,使用 Demo Block 可以快速的增加示例,并且可以很方便的修改。

提示

为了展示如何编写示例, 用于标记代码部分结束的三点增加了空格分隔,使用时需要将空格去除。

安装

安装 vuepress

参考官方文档 Vuepress

安装插件

npm i @d0whc3r/vuepress-plugin-demo-block

配置 vuepress config

config.js

module.exports = {
  head: [
    ['script', { src: 'https://cdn.jsdelivr.net/npm/react/umd/react.production.min.js' }],
    ['script', { src: 'https://cdn.jsdelivr.net/npm/react-dom/umd/react-dom.production.min.js' }],
    ['script', { src: 'https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js' }],
    ['script', { src: 'https://cdn.jsdelivr.net/npm/@babel/standalone/babel.min.js' }],
  ],
  plugins: [
    'demo-block'
  ]
}

开始使用

在 Markdown 文件中编写以下代码:

Vue示例

::: demo
```html
<template>
  <div class="box-vue">Vue {{ message }}</div>
</template>
<script>
export default {
  data: () => ({ message: 'Hello World' })
}
</script>
<style>
.box-vue { color: red; }
</style>
` ` `  <= 删除这里的空格
:::

React示例

::: demo react
```js
export default class App extends React.Component {
  constructor (props) {
    super(props)
    this.state = { message: 'Hello World' }
  }
  render () {
    return (
      <div className="box-react">
        React {this.state.message}
      </div>
    )
  }
}
App.__style__ = `
  .box-react { color: red; }   
`
` ` ` <= 删除这里的空格
:::

原生JS示例

::: demo [vanilla]
```html
<html>
  <div id="vanilla-box"></div>
</html>
<script>
  var box = document.getElementById('vanilla-box')
  box.innerHTML = 'Hello World!'
</script>
<style>
#vanilla-box {
  color: red;
}
</style>
` ` `
:::

横向展示示例

::: demo [react]
```js
export default class App extends React.Component {
  constructor (props) {
    super(props)
    this.state = { message: 'Hello World' }
  }
  render () {
    return (
      <div className="box-react">
        React {this.state.message}
      </div>
    )
  }
}
App.__style__ = `
  .box-react { color: red; }   
`
` ` `  <= delete spaces here
` ` `json
{
  "horizontal": true
}
` ` `
:::