React|Echarts|Antd|在Modal中展示echarts不显示的问题

文章介绍了如何在React中使用ref和条件渲染避免ECharts图表在modal打开时出现空白的问题,通过在modal内容存在时调用`drawChart`函数初始化或更新图表。
摘要由CSDN通过智能技术生成

打开modal时echarts部分空白:

解决方法:使用ref绑定div,dom存在时再draw

           <div
              id="quintuple"
              style={{
                width: "450px",
                height: "350px",
              }}
              ref={modalRef}
            />

  const modalRef = (obj) => {
    if (obj) {
      drawChart(obj, [
        {
          value: [
            info.question || 10,
            info.theoretical_method || 10,
            info.practical_method || 10,
            info.effects || 10,
            info.conclusion || 10,
          ],
        },
      ]);
    }
  };

function drawChart(dom, data) {
  let myChart = echarts.getInstanceByDom(dom); //有的话就获取已有echarts实例的DOM节点。
  if (myChart == null) {
    // 如果不存在,就进行初始化。
    myChart = echarts.init(dom);
  }
  //此处省略数据处理过程
  let option = {
    angleAxis: {
      startAngle: 0,
    },
    radiusAxis: {
      type: "value",
      min: 0,
      max: 100,
      z: 1,
    },
    polar: {
      radius: 100,
    },
    radar: {
      shape: "circle",
      radius: 100,
      color: "black",
      indicator: [
        {
          name: "Problem",
          max: 100,
        },
        {
          name: "Theoretical Method",
          max: 100,
        },
        {
          name: "Practical Method",
          max: 100,
        },
        {
          name: "Effects",
          max: 100,
        },
        {
          name: "Conclusion",
          max: 100,
        },
      ],
      axisName: {
        color: "black",
      },
      axisNameGap: 20,
    },
    series: [
      {
        // name: "Five-dimensional analysis",
        type: "radar",
        data: data,
        areaStyle: {
          color: "#0068c9",
          opacity: 0.2,
        },
        label: {
          show: true,
        },
      },
    ],
  };
  option && myChart.setOption(option);
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Antd,可以使用`form`属性将`Modal`组件的表单与父组件进行关联,然后在`Modal`的确认按钮上通过`form.submit()`方法来获取表单数据。 具体实现步骤如下: 1. 在`Modal`组件添加`form`属性,使表单与父组件进行关联: ```jsx import { Form, Input, Modal } from 'antd'; const MyModal = ({ visible, onCancel, onOk, form }) => { const { getFieldDecorator } = form; return ( <Modal visible={visible} onCancel={onCancel} onOk={onOk} > <Form> <Form.Item label="Username"> {getFieldDecorator('username', { rules: [{ required: true, message: 'Please input your username!' }], })(<Input />)} </Form.Item> <Form.Item label="Password"> {getFieldDecorator('password', { rules: [{ required: true, message: 'Please input your password!' }], })(<Input.Password />)} </Form.Item> </Form> </Modal> ); }; export default Form.create()(MyModal); ``` 2. 在`Modal`组件的确认按钮上通过`form.submit()`方法来获取表单数据: ```jsx import { Form } from 'antd'; import MyModal from './MyModal'; const MyParentComponent = () => { const handleSubmit = (e) => { e.preventDefault(); const { form } = myFormRef.current; form.validateFields((err, values) => { if (!err) { console.log(values); // 输出表单数据 form.resetFields(); } }); }; const myFormRef = useRef(null); return ( <div> <button onClick={() => myModalRef.current.showModal()}>Open Modal</button> <MyModal wrappedComponentRef={(form) => myFormRef.current = form} visible={visible} onCancel={() => setVisible(false)} onOk={handleSubmit} /> </div> ); }; export default MyParentComponent; ``` 在上面的代码,我们通过`form.validateFields(callback)`方法来校验表单数据,并且如果校验通过,就可以通过`values`参数获取到表单数据。同时,我们也可以通过`form.resetFields()`方法来重置表单数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值