12

how can I use chart tooltip formatter? I am using react wrapper for highcharts.
I have config like this:

const CHART_CONFIG = {
    ...
    tooltip:  
    {
        formatter: (tooltip) => {
            var s = '<b>' + this.x + '</b>';
            _.each(this.points, () => {
                s += '<br/>' + this.series.name + ': ' + this.y + 'm';
            });
            return s;
        },
        shared: true
    },
    ...
}    

But I can't access chart scope using this keyword and also I can't get point from tooltip param. Thanks

4

5 回答 5

10

OP 无法弄清楚如何使用this关键字访问图表的范围。简单的答案是因为 OP 使用的是粗箭头函数。相反,请尝试根据 OP 代码的此修改版本使用普通函数:

const CHART_CONFIG = {
    ...
    tooltip:  
    {
        formatter() {   // Use a normal fn, not a fat arrow fn
            // Access properties using `this`
            // Return HTML string
        },
        shared: true
    },
    ...
}
于 2019-07-24T16:42:14.470 回答
5

我已经遇到过这个问题。我通过创建一个函数来格式化工具提示,并将默认值应用于我想要的数据来解决它。

这是一个活生生的例子,代码如下:

import React, { Component } from 'react';
import { render } from 'react-dom';
import ReactHighcharts from 'react-highcharts';
import './style.css';

class App extends Component {
  static formatTooltip(tooltip, x = this.x, points = this.points) {
    let s = `<b>${x}</b>`;
    points.forEach((point) =>
      s += `<br/>${point.series.name}: ${point.y}m`
    );

    return s;
  }

  static getConfig = () => ({
    xAxis: {
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    tooltip: {
      formatter: App.formatTooltip,
      shared: true,
    },
    series: [{
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
    }, {
        data: [194.1, 95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4]
    }],
  })

  render() {
    return (
      <div>
        <ReactHighcharts config={App.getConfig())} />
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));
于 2017-08-10T12:49:40.890 回答
2

这是另一种方法,它也可以帮助您将 React 组件用作工具提示本身的一部分。

const Item = ({name, value}) => <div> {name}: {value}</div>

const config = { 
  formatter(this) {
    const container = document.createElement("div");
    return this.points.map(point => {
      ReactDOM.render(
        <Item name={point.series.name} value={point.y}/>
      )
      return container.innerHTML
    }
  }
}
于 2018-05-24T08:50:14.653 回答
1

Highcharts 预计 tootlip fromatter 将返回一个 HTML 字符串。当为 Highcharts 使用 react wrapper 时,可以使用格式化数据编写自定义工具提示组件,然后在设置格式化函数时的选项中,您可以使用ReactDOMServer 的 renderToString方法,该方法将从给定元素创建 HTML 字符串。虽然 renderToString 主要用于服务器端渲染,但它可以在浏览器环境中使用,没有任何问题。

import ReactDOMServer from 'react-dom/server';
import CustomTooltip from './CustomTooltip';

const options = {
    tooltip: {
        formatter() {
            return ReactDOMServer.renderToString(<CustomTooltip {...this} />);
        },
    },
};
于 2021-02-18T16:12:00.687 回答
-2

我创建了一个工具提示切换器,可以用作常规工具提示或共享。

isTooltipShared是一个布尔属性,指示工具提示是否共享。

const options = {
    tooltip: {
              formatter: props.isTooltipShared ?
                function () {
                  let s = `<b> ${this.x} </b>`;
                  this.points.forEach((point) => {
                    s += `<br/> ${point.series.name} : ${point.y}`;
                  });
                  return s;
                } : function () {
                  return `${this.series.name} : <b> ${this.x} </b> - <b> ${this.y} </b>`;
                },
              shared: props.isTooltipShared,
            },
};

并与,

<HighchartsReact
   highcharts={Highcharts}
   options={options}
/>
于 2018-11-09T12:18:22.260 回答