1

我正在尝试实现 Victor 条形图,当用户单击条形图时,我想在其中执行一些操作。但是当使用文档中给出的事件道具(使用文档中给出的相同示例代码)但事件没有触发时。您还可以使用此链接在snack.expo.io 上查看我的实现... ClickMe

包版本是:

"react-native-svg": "^9.4.0",
"victory-native": "^32.0.2",
"expo": "^33.0.0",
"react": "16.8.3",
"react-dom": "^16.8.6",
"react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz",

这是相同的代码供您参考...

注意: 我还使用了“onPressIn”、“onClick”和“onPress”,它们都不起作用。

<VictoryBar
   data={[
     {x: 1, y: 2, label: "A"},
     {x: 2, y: 4, label: "B"},
     {x: 3, y: 7, label: "C"},
     {x: 4, y: 3, label: "D"},
     {x: 5, y: 5, label: "E"},
   ]}
   events={[
     {
       target: "data",
       eventHandlers: {
         onPressIn: () => {
           return [{
             target: "labels",
             mutation: (props) => {
               return props.text === "clicked" ?
                 null : { text: "clicked" }
             }
           }];
         }
       }
     }
   ]}
 />

请帮帮我

4

4 回答 4

4

尝试将 VictoryBar 包装在 VictoryChart 中。和 TouchableOpacity 里面的 VictoryChart 像这样

<TouchableOpacity onPress={...}>
    <VictoryChart containerComponent={<VictoryContainer disableContainerEvents />}
   ...>
       <VictoryBar
        ... />
    </VictoryChart>
</TouchableOpacity>
于 2019-08-17T18:03:35.817 回答
4

像这样包装它对Svg我有用:

<Svg>
  <VictoryPie
    height={280}
    colorScale={pie_chart_color}
    data={this.state.data}
    style={...}
    events={[...]}
  />
</Svg>
于 2019-08-30T09:12:14.867 回答
2

如果您用一个词来执行此操作,则该事件的行为将与文档一样正常。

<VictoryBar
  data={[
    {x: 1, y: 2, label: "A"},
    {x: 2, y: 4, label: "B"},
    {x: 3, y: 7, label: "C"},
    {x: 4, y: 3, label: "D"},
    {x: 5, y: 5, label: "E"},
  ]}
  events={[{
    target: "data",
    eventHandlers: {
      onPress: () => {
        return [
          {
            mutation: (props) => {
              return props.text === "clicked" ?
                null : { text: "clicked" }
            }
          }
        ];
      }
    }
  }]}
/>
于 2019-07-27T18:23:02.377 回答
1

在我的情况下,使用 TouchableOpacity 包装图表仅适用于 ios,使用 svg 包装适用于 android。所以我只需要根据平台切换包装器,

const ChartClick=Platform.select({
      ios: TouchableOpacity,
      android: Svg
    });

我用这个作为,

<ChartClick>
 <VictoryChart>
 </VictoryChart>
</ChartClick>

我的包版本是:react-native-svg:9.0.0,victory-native:34.0.0

于 2020-01-28T10:11:47.857 回答