В настоящее время я занимаюсь портированием устаревшего приложения BackboneJS на ReactJS. Приложение использует VexFlow , движок рендеринга музыкальной нотации JavaScript. Одна из основных проблем, с которыми я столкнулся, заключается в том, что VexFlow отображает все само, SVG, аналогично D3. Существует много информации о комбинировании D3 с React, и я следую тому, что кажется обычной практикой в случае использования пустого элемента React ref
в качестве цели для моего рендеринга VexFlow, который все происходит в componentDidMount
:
export default class ScoreComponent extends React.Component {
constructor(props) {
super(props);
// Create a 'ref' object, which allows us to reference the React DOM
// element we create in the render method.
this.scoreElem = React.createRef();
...
}
componentDidMount() {
var score = this.score;
var elem = this.scoreElem.current;
score.setElem(elem).render(); // <- All VexFlow rendering happens here...
...
}
render() {
return (
<div className="score" id={this.props.scoreId} ref={this.scoreElem}></div>
);
}
}
Хотя это работает, это делает меня довольно неудобным, особенно потому, что мне также необходимо добавить достаточное количество кода jQuery для обработки взаимодействия с пользователем по элементам SVG (например, нажатие и перетаскивание объектов сложных путей), ни один из которых React не будет быть в курсе.
Итак, мой вопрос: я иду по пути, который приведет к тому, что я сгорю? Мне очень нравится React, и я хочу попрощаться с Backbone. В выходные я смог безболезненно перенести большую часть своего кода пользовательского интерфейса. Я смотрел на Angular в прошлом, но он кажется слишком сложным и самоуверенным.