1

I'm using react-native-chart-kit in an expo project to graph data.

I have set up onDataPointClick as below- and Expo snack here demonstrating the error: https://snack.expo.dev/@warm__tape/react-native-chart-kit-test

<LineChart
    ...
    onDataPointClick={(data) => {
        console.log('Data point clicked');
    }}
/>

Click is successfully logged to console in android. Nothing happens in web. Not sure what the issue is?

Full app.js of demo of the issue:

import React from 'react';
import { StyleSheet, Text, View, Dimensions } from 'react-native';
import { LineChart } from 'react-native-chart-kit';

console.log('Test');

export default function App() {
  return (
    <View>
      <Text>Bezier Line Chart</Text>
      <LineChart
        data={{
          labels: ["January", "February", "March", "April", "May", "June"],
          datasets: [
            {
              data: [
                Math.random() * 100,
                Math.random() * 100,
                Math.random() * 100,
                Math.random() * 100,
                Math.random() * 100,
                Math.random() * 100
              ]
            }
          ]
        }}
        width={Dimensions.get("window").width} // from react-native
        height={220}
        yAxisLabel="$"
        yAxisSuffix="k"
        yAxisInterval={1} // optional, defaults to 1
        chartConfig={{
          backgroundColor: "#e26a00",
          backgroundGradientFrom: "#fb8c00",
          backgroundGradientTo: "#ffa726",
          decimalPlaces: 2, // optional, defaults to 2dp
          color: (opacity = 1) => `rgba(255, 255, 255, ${opacity})`,
          labelColor: (opacity = 1) => `rgba(255, 255, 255, ${opacity})`,
          style: {
            borderRadius: 16
          },
          propsForDots: {
            r: "6",
            strokeWidth: "2",
            stroke: "#ffa726"
          }
        }}
        bezier
        style={{
          marginVertical: 8,
          borderRadius: 16
        }}
        onDataPointClick={data => {
          console.log(data, 'data');
        }}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

warm__tape
  • 250
  • 4
  • 19

1 Answers1

0

I'm using babel for react native web and this worked for me.

using babel-plugin-rename-jsx-attribute package: https://www.npmjs.com/package/babel-plugin-rename-jsx-attribute

and within the babel.config.js

plugins: [
  ["rename-jsx-attribute", {
    "attributes": {
      "onPress": "onClick"
    }
  }]
],
Eric Aya
  • 69,473
  • 35
  • 181
  • 253