qiuweikangdev / taro-react-echarts

🎉 基于Taro3、React的H5和微信小程序多端图表组件
MIT License
204 stars 8 forks source link

如何支持异步数据? #3

Closed helloint closed 2 years ago

helloint commented 2 years ago

暂时在用:

        <Echarts
          echarts={echarts}
          theme='dark'
          onChartReady={echartsInstance => echartsInstance.setOption(this.getOption())}
          option={this.defaultOption}
        ></Echarts>
qiuweikangdev commented 2 years ago

异步获取数据成功之后,setState把数据更新到option项的series数据项中即可

qiuweikangdev commented 2 years ago
export default function Demo() {
  const chartRef = useRef(null)
  const option = {
    legend: {
      top: 50,
      left: 'center',
      z: 100,
    },
    tooltip: {
      trigger: 'axis',
      show: true,
      confine: true,
    },
    xAxis: {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
    },
    yAxis: {
      type: 'value',
    },
    series: [
      {
        data: [150, 230, 224, 218, 135, 147, 260],
        type: 'line',
      },
    ],
  }
  const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
  const getData = async () => {
    await sleep(2000)
    chartRef.current?.setOption({
      series: [
        {
          data: [350, 430, 324, 318, 335, 347, 360],
          type: 'line',
        },
      ],
    })
  }

  useEffect(() => {
    ;(async () => {
      await sleep(2000)
      getData()
    })()
  }, [])

  return (
    <Echarts
      echarts={echarts}
      option={option}
      onChartReady={(echartsInstance) =>chartRef.current = echartsInstance}
    ></Echarts>
  )
}

也可以通过调用setOption填入数据 @helloint 初始化拿到echarts实例,异步获取到数据之后,调用setOption填入数据即可, 这是例子可以看下

helloint commented 2 years ago

挺好的。 就是看能否把 EChartsInstance 给 export 出来,现在是: import {EChartsInstance} from "taro-react-echarts/dist/components/echarts/types";

另外,你觉得支持RN的难度有多少?

qiuweikangdev commented 2 years ago

升级到1.0.7, 新增了EChartsInstance, EChartOption 类型定义

aslkami commented 2 years ago

有没有发现异步获取数据要至少 setTimeout 400ms的时候 页面才会加载,否正初始化失败? 后端接口 50ms 就返回数据,但是却要 400ms 才看到,页面加载看起来很慢

qiuweikangdev commented 2 years ago

可以加个loading状态

aslkami commented 2 years ago

可以加个loading状态

如果初始化 nexttick 去掉会有什么问题吗?

qiuweikangdev commented 2 years ago

加个nexttick 比较保险....为了保证可以获取到canvas实例

aslkami commented 2 years ago

加个nexttick 比较保险....为了保证可以获取到canvas实例

emmm, 感觉就是这个原因导致初始化 实例没创建完,然后导致父组件获取完数据 setOptions 没反应

qiuweikangdev commented 2 years ago

我后面研究一下看看这个问题。 或者你找到问题也可以给建议 也可以提pr

aslkami commented 2 years ago

好的~

wozien commented 1 year ago

我也遇到这个问题了,会出现父组件data异步加载后了,但是实例还没创建,请问有啥思路吗?