Вместо использования url
s используйте событие click ("hit"
), чтобы остаться в экосистеме React. Если вы разрешите визуализацию компонента диаграммы через React Router и экспортируете его с withRouter
, вы можете воспользоваться this.props.history
на самом компоненте. Что касается того, как обращаться с именем участника, предполагая, что bullet
на самом деле является шаблоном для других маркеров, я лично считаю, что имя участника должно быть частью данных диаграммы. Э.Г.
Основной компонент:
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { Route, BrowserRouter as Router } from "react-router-dom";
// ...
// main component's render
<Router>
<React.Fragment>
<Route
path="/"
render={props => <App {...props} />}
/>
<Route
path="/Member/:name"
render={props => <Person {...props} extra="via router" />}
/>
</React.Fragment>
</Router>
Компонент, в котором находится ваша диаграмма (например, приложение):
import React from "react";
import { withRouter } from "react-router-dom";
import * as am4core from "@amcharts/amcharts4/core";
import * as am4charts from "@amcharts/amcharts4/charts";
import am4themes_animated from "@amcharts/amcharts4/themes/animated";
// App's componentDidMount() ...
// ...chart code...
// Member names found in bullet data
chart.data = [ { name: "...", /* ... */ }, /* ... */ ];
// Since we're not using `url`, manually change the cursor to a pointer on hover
bullet.cursorOverStyle = am4core.MouseCursorStyle.pointer;
// Bullet click event
bullet.events.on("hit", event => {
this.props.history.push('../Members/' + event.target.dataItem.dataContext.name);
});
// ... end App
export default withRouter(App);
Вот пример наших столбчатых диаграмм с изображениями в верхней части демонстрации . Реагируйте, что при нажатии на маркер / изображения, оба обновляют состояние основного компонента, а также переходят на новый URL, и оба загружают информация о человеке:
https://codesandbox.io/s/olpzok2rxz
Если member.name
не является частью данных диаграммы и не может быть, было бы полезно иметь образец вашего приложения на JSFiddle или CodeSandbox, чтобы мы могли помочь в дальнейшем.