shifeng1993 / react-native-secharts

一个webview封装的图表组件。基于百度echarts4
MIT License
219 stars 57 forks source link

在 componentDidMount 中使用 setOption 不会更新 #28

Closed Janmay closed 5 years ago

Janmay commented 6 years ago

由于 webview 还没有加载完成,在 componentDidMount 中使用 setOption 不会更新 chart。 可以加个 "onLoad"吗? @shifeng1993

shifeng1993 commented 6 years ago

现在可以不使用实例的setOption方法了,可以直接用react的组件内state进行绑定,如果需要变更,直接setstate新的option即可。之前版本的secharts由于onload会触发闪烁,所以去掉,实例方法setOption由于组件内state变更后option不能保存,会被重置成state中的值,所以去掉。如果实在需要使用onload 可以安装1.5.0版本

Janmay commented 5 years ago

@shifeng1993 我试过 setState options,但是因为是在 componentDidMount 中使用,往往 secharts 的 webview 还没有 onLoad,可能还没有添加上 renderChart 的 message event listener ,componentWillReceiveProps 已经接收到新数据并且 setOption 了,此时 setOption 是无效的。 我说的“onLoad”是指:

        <WebView
            ref="chart"
            originWhitelist={['*']}
            renderLoading={this.props.renderLoading || (() => <View style={{backgroundColor: this.props.backgroundColor}} />)} // 设置空View,修复ioswebview闪白
            style={{backgroundColor: this.props.backgroundColor}} // 设置背景色透明,修复android闪白
            scrollEnabled={false}
            onMessage={this._handleMessage}
            injectedJavaScript={renderChart(this.props)}
            startInLoadingState={false}
            source={source}
            onLoad={this.props.onLoad}
          />
...
Echarts.propTypes = {
  option: PropTypes.object,
  backgroundColor: PropTypes.string,
  width: PropTypes.number,
  height: PropTypes.number,
  renderLoading: PropTypes.func,
  onPress: PropTypes.func,
  onLoad: PropTypes.func
}

以便于webview loaded 后再处理数据。

shifeng1993 commented 5 years ago

我是说直接setState你的新状态。详情见文档内说明