如何在流线图js中渲染coinbase API

问题描述 投票:0回答:1

问题:我正在尝试在 ChartJS 中渲染 level2 api。但做不到

我将数据保留在 2 个变量出价、询问并尝试根据时间绘制它们。

代码沙箱 https://codesandbox.io/p/sandbox/dazzling-neumann-qjw7yv

API:https://docs.cdp.coinbase.com/exchange/docs/websocket-channels/#level2-channel

代码


    options={{
        scales: {
          x: {
            type: "realtime",
            realtime: {
              onRefresh: (chart) => {
                bids.forEach((bid) => {
                  chart.data.datasets[0].data.push({
                    x: bid.time,
                    y: bid.price,
                  });
                });

                asks.forEach((ask) => {
                  chart.data.datasets[1].data.push({
                    x: ask.time,
                    y: ask.price,
                  });
                });
              },
            },
          },
        },
      }}
javascript reactjs chart.js hook coinbase-api
1个回答
0
投票

花了一点时间之后,这就是我设法做到的。

首先,您创建一个表,该表将通过 useEffect 填充每个新的出价或要价。

const { bids, asks } = useWebSocket();
  const [chartData, setChartData] = useState({ datasets: [] });

  const [newBid, setnewBid] = useState([]);
  const [newAsk, setnewAsk] = useState([]);

  useEffect(() => {
    bids.map((bid) => {
      setnewBid([...newBid, { x: bid.time, y: bid.price }]);
    });
  }, [bids]);

  useEffect(() => {
    asks.map((ask) => {
      setnewAsk([...newAsk, { x: ask.time, y: ask.price }]);
    });
  }, [asks]);

其次,你定义你的选择。

const options = {
    scales: {
      y: {
        display: true,
        type: "linear",
        position: "left",
        suggestedMin: 0.245,
        suggestedMax: 0.26,
      },

      x: {
        display: true,
        type: "realtime",
      },
    },
  };

第三,定义数据集。

const datasets = {
    datasets: [
      {
        label: "Bids",
        backgroundColor: "rgba(255, 99, 132, 0.5)",
        borderColor: "rgb(255, 99, 132)",
        fill: true,
        data: newBid,
        yAxisID: "y",
        xAxisID: "x",
      },
      {
        label: "Asks",
        backgroundColor: "rgba(54, 162, 235, 0.5)",
        borderColor: "rgb(54, 162, 235)",
        cubicInterpolationMode: "monotone",
        fill: true,
        data: newAsk,
      },
    ],
  };

最后将所有内容导入图表中。

return <Line data={datasets} options={options} />;

多亏了这段代码,这两行才可以正确显示,而且随着时间的推移,轴不会做出奇怪的反应。曲线不一定很漂亮,但是是后期调整看的。

竭诚为您服务!

© www.soinside.com 2019 - 2024. All rights reserved.