Giter Site home page Giter Site logo

qiuweikangdev / taro-react-echarts Goto Github PK

View Code? Open in Web Editor NEW
189.0 3.0 7.0 1.27 MB

🎉 基于Taro3、React的H5和微信小程序多端图表组件

License: MIT License

JavaScript 98.93% TypeScript 1.02% HTML 0.03% Shell 0.01%
echarts taro pnpm reactjs turborepo

taro-react-echarts's Introduction

taro-react-echarts

基于Taro3、React的H5和微信小程序多端图表组件

  • 兼容H5、微信小程序

  • 开箱即用,快速开发图表,满足在移动端各种可视化需求

  • 支持自定义构建echarts

安装

npm install taro-react-echarts

导入组件

import Echarts from 'taro-react-echarts'

参数说明

Echarts

参数 描述 类型 必传 默认值
本身参数 参考Canvas 【微信小程序】
echarts echarts对象,可自定义构建 echarts
option 参考setOption object
className echarts类名 string key
style echarts样式对象 object {height: '300px'}
className echarts类名 string
theme echarts 的主题 string
notMerge 默认为true,不跟之前设置的option合并,保证每次渲染都是最新的option boolean true
lazyUpdate setOption 时,延迟更新数据 boolean false
showLoading 图表渲染时,是否显示加载状态 boolean
loadingOption 参考loading配置项 object
opts 参考echarts. init string
onEvents 绑定 echarts 事件 object
isPage 表示是否是顶层页面级别 【1、注意嵌套在Popup 、Dialog 、Picker等弹出层都不是页面级别,需要设置为false,否则可能会不显示 2、以及嵌套在Tabs标签页中如果出现显示不正常,可设置isPage为false, 因为都有可能不触发useReady】 boolean true

Events

事件名 描述 类型 必传 默认值
onChartReady 当图表准备好时,将使用 echarts 对象作为参数回调函数 Function

使用

import { useRef } from 'react'
import Echarts, { EChartOption, EchartsHandle } from 'taro-react-echarts'
import echarts from '@/assets/js/echarts.js'

export default function Demo() {
 const echartsRef = useRef<EchartsHandle>(null)
 const option: EChartOption = {
    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'
      }
    ]
  }

  return (
      <Echarts
        echarts={echarts}
        option={option}
        ref={echartsRef}
      ></Echarts>
  );
}

友情推荐

项目 描述
taro-react-table 基于 taro3、react 的 H5 和微信小程序多端表格组件

taro-react-echarts's People

Contributors

qiuweikangdev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

taro-react-echarts's Issues

Looks like the chart doesn't work when I try to render it async?

Please check the demo: https://github.com/helloint/test-taro-react-echarts
Click 'Async Echart load', the 2nd chart doesn't show up in weapp. It works fine in H5.

👽 Taro v3.5.5


  Taro CLI 3.5.5 environment info:
    System:
      OS: macOS 12.6
      Shell: 5.8.1 - /bin/zsh
    Binaries:
      Node: 16.10.0 - ~/.nvm/versions/node/v16.10.0/bin/node
      Yarn: 1.22.17 - /opt/homebrew/bin/yarn
      npm: 7.24.0 - ~/.nvm/versions/node/v16.10.0/bin/npm
    npmPackages:
      @tarojs/cli: 3.5.5 => 3.5.5 
      @tarojs/components: 3.5.5 => 3.5.5 
      @tarojs/helper: 3.5.5 => 3.5.5 
      @tarojs/plugin-framework-react: 3.5.5 => 3.5.5 
      @tarojs/plugin-platform-alipay: 3.5.5 => 3.5.5 
      @tarojs/plugin-platform-jd: 3.5.5 => 3.5.5 
      @tarojs/plugin-platform-qq: 3.5.5 => 3.5.5 
      @tarojs/plugin-platform-swan: 3.5.5 => 3.5.5 
      @tarojs/plugin-platform-tt: 3.5.5 => 3.5.5 
      @tarojs/plugin-platform-weapp: 3.5.5 => 3.5.5 
      @tarojs/react: 3.5.5 => 3.5.5 
      @tarojs/router: 3.5.5 => 3.5.5 
      @tarojs/runtime: 3.5.5 => 3.5.5 
      @tarojs/shared: 3.5.5 => 3.5.5 
      @tarojs/taro: 3.5.5 => 3.5.5 
      @tarojs/taro-h5: 3.5.5 => 3.5.5 
      @tarojs/webpack5-runner: 3.5.5 => 3.5.5 
      babel-preset-taro: 3.5.5 => 3.5.5 
      eslint-config-taro: 3.5.5 => 3.5.5 
      react: ^18.0.0 => 18.2.0 

By the way, the demo throws exception in dev:weapp. I got this:

VM2992:22 WXMLRT_$gwx:./base.wxml:template:145:16: Template `tmpl_0_15` not found.
_wp @ VM2992:22
_w @ VM2992:1024
d_.<computed>.tmpl_1_container @ VM2992:3263
xC @ VM2992:2656
wfor @ VM2992:571
_2z @ VM2992:714
d_.<computed>.tmpl_0_2 @ VM2992:2664
d_.<computed>.tmpl_0_container @ VM2992:2949
xC @ VM2992:2538
wfor @ VM2992:571
_2z @ VM2992:714
d_.<computed>.taro_tmpl @ VM2992:2546
m3 @ VM2992:6630
(anonymous) @ VM2992:6691
Kn @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
_updateValues @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
updateValues @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
c.doUpdates @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
y.setData @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ vendors-node_modules_taro_weapp_prebundle_chunk-QXCD76IY_js.js?t=wechat&s=1667272216242&v=2a81da5c6bb1c0bf65fc2d86080d24cb:2951
f @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
p @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
setTimeout (async)
globalThis.setTimeout @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
globalThis.setTimeout @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
performUpdate @ vendors-node_modules_taro_weapp_prebundle_chunk-QXCD76IY_js.js?t=wechat&s=1667272216242&v=2a81da5c6bb1c0bf65fc2d86080d24cb:2883
(anonymous) @ vendors-node_modules_taro_weapp_prebundle_chunk-QXCD76IY_js.js?t=wechat&s=1667272216242&v=2a81da5c6bb1c0bf65fc2d86080d24cb:850
wd @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:1098
$g @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:3665
Yg @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:3642
Xg @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:3623
Th @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:4424
Nh @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:4387
Eh @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:4050
J @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:119
R @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:151
f @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
p @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
setTimeout (async)
globalThis.setTimeout @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
globalThis.setTimeout @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
S @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:168
I @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:174
exports.unstable_scheduleCallback @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:269
Dh @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:4821
Z @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:3965
Ad @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:3927
enqueueForceUpdate @ vendors-node_modules_taro_weapp_prebundle_react-dom_js.js?t=wechat&s=1667272216242&v=cb0a425385b8df0419dd59cfaf3b5447:1139
E.forceUpdate @ vendors-node_modules_taro_weapp_prebundle_chunk-LNJCN3VW_js.js?t=wechat&s=1667272216242&v=10bf0abe3f34b95cd961609f9ed43685:58
mount @ vendors-node_modules_taro_weapp_prebundle_tarojs_plugin-framework-react_dist_runtime_js.js?t=wechat&s=1667272216242&v=d50f5dd1954bbb8e8f82edcddf2c1828:282
mount @ vendors-node_modules_taro_weapp_prebundle_tarojs_plugin-framework-react_dist_runtime_js.js?t=wechat&s=1667272216242&v=d50f5dd1954bbb8e8f82edcddf2c1828:322
mount @ vendors-node_modules_taro_weapp_prebundle_chunk-QXCD76IY_js.js?t=wechat&s=1667272216242&v=2a81da5c6bb1c0bf65fc2d86080d24cb:843
onLoad @ vendors-node_modules_taro_weapp_prebundle_chunk-QXCD76IY_js.js?t=wechat&s=1667272216242&v=2a81da5c6bb1c0bf65fc2d86080d24cb:857
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
l.__callPageLifeTime__ @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
wr @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WASubContext.js?t=wechat&s=1667272216242&v=2.27.0:1
l.emit @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
emit @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
l.emit @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
emit @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
(anonymous) @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
emit @ WAServiceMainContext.js?t=wechat&s=1667272216242&v=2.27.0:1
c @ VM9 asdebug.js:10
u @ VM9 asdebug.js:10
(anonymous) @ VM9 asdebug.js:1
f @ VM9 asdebug.js:1
g @ VM9 asdebug.js:1
(anonymous) @ VM9 asdebug.js:1
_ws.onmessage @ VM9 asdebug.js:1
Show 41 more frames
[WXML Runtime warning] ./base.wxml
 Template `tmpl_0_15` not found.
  143 | 
  144 | <template name="tmpl_1_container">
> 145 |   <template is="{{xs.a(1, i.nn, l)}}" data="{{i:i,cid:1,l:xs.f(l,i.nn)}}" />
      |                ^
  146 | </template>
  147 | 
  148 | <template name="tmpl_2_0">

I tested with build:weapp.

快速更新echart options时会不重新渲染

场景:
react组件渲染时给默认值渲染,当获取到网络数据后根据网络数据进行渲染。
因为网络数据返回挺快的,导致快速刷新echart组件,这是echart组件不会用新的网络数据进行渲染

web浏览器的echart组件是可以的。

dataZoom

是否支持dataZoom?初步测试dataZoom 无法进行拖拽和缩放。

TypeError: Cannot read property 'getAttribute' of null

发现一个异常:
TypeError: Cannot read property 'getAttribute' of null
at getAttribute (._src_assets_js_echarts.js:9713)
at getInstanceByDom (._src_assets_js_echarts.js:34642)
at Object.dispose (._src_assets_js_echarts.js:34642)
at dispose (.._src_components_echarts_index.tsx:199)
at .._src_components_echarts_index.tsx:57
at Cg (._node_modules_react-reconciler_cjs_react-reconciler.production.min.js:143)
at Fg (._node_modules_react-reconciler_cjs_react-reconciler.production.min.js:145)
at Fh (._node_modules_react-reconciler_cjs_react-reconciler.production.min.js:190)
at ._node_modules_react-reconciler_cjs_react-reconciler.production.min.js:188
at J (._node_modules_react-reconciler_node_modules_scheduler_cjs_scheduler.production.min.js:13)(env: macOS,mp,1.06.2208010; lib: 2.25.0)

重现条件:

  1. 当离开页面时
  2. 仅在微信小程序存在,H5是正常的。(这很奇怪,按理说这个是React Dom Ref的问题,应该都会报错才对)

代码分析:

  // 销毁echarts实例
  const dispose = () => {
    echarts?.dispose(canvasRef.current)
  }

这里的canvasRef.current在unmounted的时候已经是null了。可以参考:https://codesandbox.io/s/react-useeffect-useref-warning-407fj?file=/src/index.js
可以在你的demo里重现,只需要增加一个page, /index/index,用于创造退出页面的场景即可。

建议:
如果只是为了避免异常:

  // 销毁echarts实例
  const dispose = () => {
    if (canvasRef.current) {
      echarts?.dispose(canvasRef.current)
    }
  }

虽然我不确定这里为什么要把echarts给dispose掉,但如果需要的话,可能要多改一些代码了。

代码销毁组件的问题

老哥,我看代码里有写,卸载组件的时候销毁实例,但是一直没有触发,我怀疑是这个问题:

  // 销毁echarts实例
  const dispose = () => {
    if (canvasRef.current) {
      echarts?.dispose(canvasRef.current)
    }
  }

canvasRef.current 一直为null,我刚试了下,好像改成chartRef,就可以自己销毁了,不用我在外面再手动获取实例销毁了

老哥有时间看下这个问题

[小程序] echart图表不跟随页面滚动

image

图表一直会固定在同一个位置,滚动时,图表不会跟随页面滚动

我 百度 谷歌很多关键字,找到的似乎都是 ec-echarts 的解决办法
即添加 force-use-old-canvas="true",让canvas 降级处理

首次渲染的时候,option传入的不是最新的值

` const handleEchartsData = dataList => {
console.log('handleEchartsData');

const xData: Array<string> = [];
  const yData: Array<number> = [];
  dataList.forEach(data => {
      xData.push(data['label'])
      yData.push(data['ticket_count']);
  });
    const newOption={
        legend: {
          top: 50,
          left: "center",
          z: 100
        },
        tooltip: {
          trigger: "axis",
          show: true,
          confine: true
        },
        xAxis: {
          type: "category",
            data: xData,
            axisLabel: {
                interval: 0,
                rotate: 30
          },
          axisTick: {
            alignWithLabel: true
            },
        },
        yAxis: {
            type: "value",
        },
        series: [
          {
            data: yData ,
            type: "bar"
          }
        ]
    }
    
  setOption(newOption)
  return [xData, yData];

};
`
但是option首次渲染的时候还是根据defaultoption渲染的

在h5中展示正常,在小程序中不展示

`
import './index.scss'

import Echarts from 'taro-react-echarts';
import * as echarts from 'echarts';

const Index = () => {

const options = {
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'
}
]
}

return (

);
};

export default Index;
`

一开始小程序echarts 出不来

场景:

不想每次都引入 echarts,就又封装了一层,

环境:

  • 调试库 2.25.3
  • 开发者工具 1.05.2203070
  • Taro3.4
  • ehcarts 5.3.2
  • TS

问题

  1. 封装之后 ,option 通过一层层的传递,初始化 option为 空对象{}, 后面拿到值之后,页面不刷新,不展示 echarts
  2. 我是在子组件用的,isPage 其实应该没多大关系,然而我给自己封装的 组件加上 key 和 isPage=false, 有些生效,有些不生效
  3. dataZoom 和 toolTip 在模拟机上不生效,真机还没测试(已定制化内容加上了功能)

echarts 微信小程序 图表消失的问题

Taro 时候从后端获取的数据 map 循环渲染 图表,图表不显示

for 循环渲染不会有问题,使用Taro的混合 用ec-canvas不会有问题,可以正常显示

不使用ec-canvas的 原因是 动态改变图表不方便(或者老哥有什么好的方案吗

PS:老哥封装的很好,有点像 react-echarts那个样子了

设置高度 height 为 100% 问题

当给图表手动设置一个100%父容器的高度时候,会出现高度不符合预测的情况:
image

运行结果:
image

源码调式结果:
在 initChart 函数里面是优先拿 style.height 高度,所以造成这个问题,可不可以直接拿 canvsRef.current.clientHeight?
image

TypeError: Cannot read property 'current' of undefined

Taro版本3.5.1

..src_components.ts:26 TypeError: Cannot read property 'current' of undefined
at jsxDEV (..
....node_modules[email protected]_node_modules_react_cjs_react-jsx-runtime.development.js:951)
at jsxWithValidation (..
....node_modules[email protected]_node_modules_react_cjs_react-jsx-runtime.development.js:1247)
at Object.jsxWithValidationDynamic [as jsx] (..
.._..node_modules[email protected]_node_modules_react_cjs_react-jsx-runtime.development.js:1301)
at .._src_core_index.tsx:291
at T (._node_modules_preact_hooks_dist_hooks.module.js:1)
at Echarts (.._src_core_index.tsx:289)
at d.t [as constructor] (._node_modules_preact_compat_dist_compat.module.js:1)
at d.O [as render] (._node_modules_preact_dist_preact.module.js:1)
at j (._node_modules_preact_dist_preact.module.js:1)
at w (._node_modules_preact_dist_preact.module.js:1)

动态设置 Echarts 的 style 高度,图表空白,固定高度正常

横向条形图,需要根据其数量来动态设置 canvas 的高度。

const [chartHeight, setChartHeight] = useState('50px')

高度设置上去了,但是图表却空白了。调用 echartsRef.current?.resize() 也不行

<Echarts
    echarts={echarts}
    option={option}
    isPage={false}
    onChartReady={(echarts) => {
      echartsRef.current = echarts
    }}
    style={{
      width: '100%',
      height: chartHeight,
    }}
  />

设置为固定高度时,可正常渲染图表:

<Echarts
    echarts={echarts}
    option={option}
    isPage={false}
    onChartReady={(echarts) => {
      echartsRef.current = echarts
    }}
    style={{
      width: '100%',
      height: chartHeight,
    }}
  />

如何支持异步数据?

暂时在用:

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.