乐闻世界logo
搜索文章和话题

How to render C3 chart using Nuxt

1个答案

1

1. Installing Dependencies

Within a Nuxt.js project, you must first install C3.js and its dependency D3.js. You can use npm or yarn to install these packages:

bash
npm install c3 d3

or

bash
yarn add c3 d3

2. Creating a Nuxt Plugin

Because C3.js depends on D3.js, it is essential to correctly import them in client-side code. In Nuxt.js, a recommended approach is to integrate third-party libraries using a plugin.

Create a file named c3-plugin.js in the plugins directory and import C3.js:

javascript
import * as d3 from 'd3' import c3 from 'c3' export default (_, inject) => { inject('c3', { c3, d3 }) }

In nuxt.config.js, register this plugin and ensure it runs only on the client side:

javascript
export default { plugins: [ { src: '~/plugins/c3-plugin.js', mode: 'client' } ] }

3. Using C3.js in Pages

Once the plugin is configured, you can access C3.js and D3.js via this.$c3.c3 and this.$c3.d3 in any component or page. Below is an example of creating a simple chart in a page component:

vue
<template> <div> <div id="chart"></div> </div> </template> <script> export default { mounted() { this.generateChart() }, methods: { generateChart() { const chart = this.$c3.c3.generate({ bindto: '#chart', data: { columns: [ ['data1', 30, 200, 100, 400, 150, 250], ['data2', 50, 20, 10, 40, 15, 25] ], type: 'spline' } }) } } } </script>

4. Considering SSR Compatibility

Since C3.js and D3.js directly interact with the DOM, they are incompatible with server-side rendering. Therefore, ensure both the plugin and chart generation code execute only on the client side. In Nuxt.js, this is achieved by configuring the plugin mode and timing the chart generation appropriately.

Conclusion

By following these steps, you can integrate and utilize C3.js within a Nuxt.js application to generate dynamic charts. This method leverages Nuxt.js's plugin system and its support for client-server code separation, simplifying third-party library integration while avoiding compatibility issues during server-side rendering.

2024年7月26日 00:34 回复

你的答案