首次渲染时,React Recharts柱状
P粉043432210
P粉043432210 2023-07-28 15:09:12
[React讨论组]


import React, { Fragment, useCallback } from "react";
import {
  BarChart,
  Bar,
  ResponsiveContainer,
  Cell,
  LabelList,
  YAxis,
} from "recharts";
import { fontSizes, textColors } from "styles/theme";

const CustomLabelImage = (props: any) => {
  const { x, y, value } = props;
  return (
    <Fragment key={`${Math.random()}`}>
      <image
        x={+x! - 5}
        clipPath={"circle(40%)"}
        y={y - 105}
        width={55}
        height={55}
        href={value}
      />
    </Fragment>
  );
};
const CustomLabel = (props: any) => {
  const { x, y, value } = props;
  return (
    <Fragment key={`${Math.random()}`}>
      <text
        x={x}
        y={y}
        className="grotesk"
        style={{
          fontWeight: 600,
          fontSize: fontSizes.f20,
        }}
        dx={10}
        dy={-10}
        textAnchor="top"
        fill={textColors.sceptreBlue}
      >
        {value}
      </text>
    </Fragment>
  );
};

const CustomLabelName = (props: any) => {
  const { x, y, value } = props;
  return (
    <Fragment key={`${Math.random()}`}>
      <text
        x={x}
        y={y}
        className="grotesk"
        style={{
          fontWeight: 300,
          fontSize: fontSizes.f10,
        }}
        dx={-4}
        dy={-35}
        textAnchor="top"
        fill={textColors.sceptreBlue}
      >
        {value?.split(" ")[0]} {value?.split(" ")[1]?.slice(0, 1)}
      </text>
    </Fragment>
  );
};

export default function BarChartRedList({
  data,
  color,
}: {
  data: { time: string; lost: number; avatar?: string }[];
  withLabel?: boolean;
  withAvatar?: boolean;
  color?: string;
}) {
  const renderItems = useCallback(() => {
    return (
      <Fragment>
        {data.map((item, index) => {
          return (
            <Fragment key={`${item.lost}_${index}`}>
              <LabelList
                dataKey="avatar"
                position="top"
                key={`cell3-${index}`}
                width={100}
                offset={10}
                content={<CustomLabelImage />}
              />
              <LabelList
                dataKey="time"
                key={`cell2-${index}`}
                position="top"
                offset={10}
                width={100}
                content={<CustomLabelName />}
              />
              <LabelList
                dataKey="lost"
                position="top"
                key={`cell1-${index}`}
                offset={5}
                width={"100px"}
                content={<CustomLabel />}
              />
              <Cell
                radius={8}
                key={`cell-${index}`}
                width={40}
                offset={20}
                fill="url(#barGradient)"
              />
            </Fragment>
          );
        })}
      </Fragment>
    );
  }, [data]);

  return (
    <div>
      <ResponsiveContainer height={350}>
        <BarChart
          width={500}
          height={200}
          data={data}
          margin={{
            top: 120,
            right: 0,
            left: 0,
            bottom: 20,
          }}
        >
          <defs>
            <linearGradient id="barGradient" x1="0" y1="0" x2="0" y2="1">
              <stop offset="5%" stopColor={color} stopOpacity={1} />
              <stop offset="95%" stopColor={color} stopOpacity={0.2} />
            </linearGradient>
          </defs>
          <Bar yAxisId="left" dataKey="lost">
            {renderItems()}
          </Bar>
        </BarChart>
      </ResponsiveContainer>
    </div>
  );
}

在窗口加载后的第一次点击按钮之后,

我尝试使用图片渲染柱状图,但结果并不如我预期的那样。在窗口加载后的第一次渲染中,图片和文本不可见,但在进行一些操作后它们会变得可见。我无法解决这个问题。请帮我找出如何解决这个问题。

我的包版本是:"recharts": "^2.4.3", "next": "13.4.7", "react": "18.2.0"。


P粉043432210
P粉043432210

全部回复(1)
P粉237689596

经过一些研究,我找到了解决方案。

<Bar 
   yAxisId="left"
   dataKey="lost"
   isAnimationActive={false} //added this
>
  {renderItems()}
</Bar> 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号