当前位置: 首页 > 知识库问答 >
问题:

Nivo响应线图只响应变宽,不响应变窄

裴钧
2023-03-14

我试图用nivo制作一个响应线图。

我用这个MWE重现了我的尝试:

import React, { useState, useEffect } from "react";
import { ResponsiveLine } from "@nivo/line";
import styled from "styled-components";

const HoursGraphWrapper = styled.div`
  display: grid;
  grid-template-rows: 300px;
  grid-template-columns: 1fr;
  grid-gap: 10px;
`;

const useWindowWidth = () => {
  let width, setWidth;
  if (typeof window !== "undefined") {
    [width, setWidth] = useState(window.innerWidth);
  } else {
    [width, setWidth] = useState(1001);
  }

  useEffect(() => {
    const handleResize = () => setWidth(window.innerWidth);
    window.addEventListener("resize", handleResize);
    return () => {
      window.removeEventListener("resize", handleResize);
    };
  });

  return width;
};

const TestGraph = () => {
  const width = useWindowWidth();

  return (
    <HoursGraphWrapper>
      <ResponsiveLine
        data={[
          {
            id: "A",
            data: [
              { x: "2019-01-11", y: 11 },
              { x: "2019-01-12", y: 20 },
              { x: "2019-01-13", y: 24 },
              { x: "2019-01-14", y: 25 },
              { x: "2019-01-15", y: 15 },
              { x: "2019-01-16", y: 50 },
              { x: "2019-01-17", y: 30 },
              { x: "2019-01-18", y: 31 }
            ]
          },
          {
            id: "B",
            data: [
              { x: "2019-01-11", y: 30 },
              { x: "2019-01-12", y: 24 },
              { x: "2019-01-13", y: 22 },
              { x: "2019-01-14", y: 15 },
              { x: "2019-01-15", y: 35 },
              { x: "2019-01-16", y: 45 },
              { x: "2019-01-17", y: 20 },
              { x: "2019-01-18", y: 11 }
            ]
          }
        ]}
        colors={{ scheme: "set1" }}
        xScale={{
          type: "time",
          format: "%Y-%m-%d",
          precision: "day"
        }}
        xFormat="time:%Y-%m-%d"
        yScale={{
          type: "linear",
          stacked: false
        }}
        axisLeft={{
          format: value => `${value}hr`,
          legend: "Total Hours",
          legendOffset: -50,
          legendPosition: "middle"
        }}
        axisBottom={{
          format: "%b %d",
          legend: "Date",
          legendOffset: 36,
          legendPosition: "middle",
          tickValues: width < 1000 ? 5 : undefined
        }}
        curve="monotoneX"
        enablePoints={width > 1000}
        pointBorderWidth={1}
        useMesh={true}
        enableSlices={false}
        margin={{ top: 10, right: 20, bottom: 60, left: 80 }}
        animate={true}
      />
    </HoursGraphWrapper>
  );
};

export default TestGraph;

如果我让浏览器更宽,线条图会像你期望的那样响应,填满空间。

我的问题是,如果我使浏览器变窄,图形不会像我使其变宽时那样调整大小以填充浏览器宽度的100%。对于新的浏览器宽度来说,它仍然太宽。有趣的是,在刷新时,图形总是占据浏览器的100%。

把浏览器做宽做窄,如何让图占据浏览器的100%?

共有1个答案

梅逸清
2023-03-14

我已经解决了这个问题,因为这个问题和答案是这样的:当窗口变小时,弹性物品不会缩小

解决方案是添加一个div包装器周围的响应线图形具有以下样式:

最小宽度:0

 类似资料:
  • 当一个应用在处理完一个请求后, 这个应用会生成一个 response 响应对象并把这个响应对象发送给终端用户 这个响应对象包含的信息有 HTTP 状态码,HTTP 头和主体内容等, 从本质上说,网页应用开发最终的目标就是根据不同的请求去构建这些响应对象。 在大多数实际应用情况下,你应该主要地去处理 response 这个 应用组件, 在默认情况下,它是一个继承自 yii\web\Response

  • CabalPHP 的请求(Request)和响应(Response)对象依赖 zendframework/zend-diactoros 实现了 PSR-7标准 psr/http-message 中的 Psr\Http\Message\ServerRequestInterface和Psr\Http\Message\ResponseInterface 的全部接口,同时也扩展了自己的一些实用方法方便使用

  • 在 Hyperf 里可通过 Hyperf\HttpServer\Contract\ResponseInterface 接口类来注入 Response 代理对象对响应进行处理,默认返回 Hyperf\HttpServer\Response 对象,该对象可直接调用所有 Psr\Http\Message\ResponseInterface 的方法。 注意 PSR-7 标准为 响应(Response) 进

  • 响应对象封装了从服务器返回到客户端的所有信息。在HTTP协议中,这些信息是包含在从服务器传输到客户端的HTTP头信息或响应的消息体中。

  • Response对象的属性。 Response.url 最终的URL。 Response.text 响应内容,以unicode为单位。 如果Response.encoding是None且chardet模块可用,则将猜测内容的编码。 Response.content 响应内容,以字节为单位。 Response.doc 一个PyQuery响应的内容的对象。链接默认为绝对链接。 请参阅PyQuery的文

  • 问题内容: 我有一个响应式html布局中的现有图像映射。图像根据浏览器大小缩放,但是图像坐标显然是固定的像素大小。我必须选择哪些选项来调整图像地图坐标的大小? 问题答案: 您也可以使用svg代替图像映射。