Как сделать график сложных процентов с ежемесячными взносами, используя React с Typescript

Для тех из вас, кто не читал Часть 1 и хочет понять, что привело к этой статье, посмотрите здесь.

В части 1 я очень поверхностно попытался объяснить сложные проценты с ежемесячными взносами и фиксированной годовой процентной ставкой, а в этой статье я поделюсь с вами тем, как построить на их основе график.

Сначала стек:

  • Реагировать с машинописным текстом
  • ChartJs для графика
  • MomentJS для дат

Итак, давайте перейдем к терминалу и создадим базовое приложение create-реагировать.

npx create-react-app my-chart --typescript

Это создаст для нас реагирующее приложение со всеми конфигурациями машинописного текста.
Теперь давайте перейдем к проекту и добавим библиотеки в микс.

cd my-chart
npm install chart.js @types/chart.js moment node-sass

Запустить сервер

npm start

И давайте сначала попробуем построить базовый граф.

Посмотрите базовый пример ChartJS, https://www.chartjs.org/docs/latest/, скопируйте и вставьте ‹canvas› и вставьте его куда-нибудь в метод рендеринга App.tsx, и давайте вставим пример скрипта (с некоторыми модификациями машинописного текста, см. ниже), предоставленный ChartJS в хуке useEffect в компоненте (потому что хуки — это офигенно 😎), и у вас должно быть следующее.

И вы должны увидеть этот график! Поздравляю, хватай себе 🍪 ты это заслужил!

Имея это на месте, давайте начнем строить наш составной график.

Во-первых, нам нужны формулы, о которых мы говорили в части 1, и реализовать их в коде. Ниже у нас есть формула сложных процентов с учетом ежемесячных приращений.

Давайте разобьем это на части, сначала построим основной, а затем добавим вклады.

Эти две части кода представляют собой javascript-представление приведенной выше формулы.

Теперь нам нужна другая функция для обработки суммы двух выходных данных. Эта функция получит все необходимые для расчетов параметры и выведет общую сумму, начисленную за заданный период.

В последней части нам нужно создать функцию, которая будет перебирать годы и вычислять годовое составное значение, чтобы получить массив, который мы можем использовать на графике.

Создадим файл calculations.ts и добавим их в проект.

Теперь, когда наши расчетные функции готовы, давайте попробуем отобразить их на графике. Во-первых, нам нужно изменить тип графика с type: 'bar’ на type: 'line', во-вторых, добавим несколько лет к оси X и, наконец, давайте вызовем наши функции с некоторыми базовыми статическими данными. Проверьте код ниже:

Перейдите в свой браузер по адресу http://localhost:3000, и вы должны увидеть следующее.

🎉 🎉 Вуаля!! 🎉 🎉

Наш первый составной граф представлен нам!

Хватай тонны 🍪или 🍕 и радуйся своему величию!!

Теперь нужно внести некоторые коррективы, чтобы получить полный график, но это основное вещество, которое позволит нам масштабироваться. Ниже мы увидим, как рассчитать годы вместо жесткого кодирования, и предоставим нашим пользователям возможность изменить параметры вычислений.

Для расчетов по годам мы могли бы использовать функциональность временной декартовой оси времени из ChartJS, но для этого примера я решил создать собственный массив дат для меток.

Поскольку мы уже добавили moment.js в смесь, давайте начнем создавать наш массив дат. Для этого мы передадим количество лет, которое выберет пользователь (например, 10, 15, 20 и т. д.), и мы будем использовать момент, чтобы получить массив с годами.

Добавим в наш файл Calculation.tsx следующее:

И отредактируйте компонент Chart в App.tsx

И мы должны увидеть тот же результат, но с метками года.

Просто для проверки давайте изменим options.years: 20 и посмотрим, как график перестроится с новыми значениями и датами.

Теперь, когда это сделано, мы можем легко добавить поля ввода для управления переменными, которые мы жестко запрограммировали в объекте параметров.

Давайте зайдем в наш браузер и БАМ 🎉 наш график готов!

Надеюсь, вам понравилась история, и вы смогли дойти до конца с функциональным и рабочим примером графа.

Сейчас есть много способов, которыми мы можем стилизовать этот график, и я не буду рассказывать об этом в этой истории (она уже довольно длинная 😅), для этой цели я рекомендую Bulma для общего стиля, очень легкий CSS-фреймворк с множеством опций для создавайте свои удивительные макеты и ознакомьтесь с параметрами, которые ChartJs предоставляет нам для всех настроек, от линий сетки, осей и делений, чтобы сделать лучший график для ваших пользователей.

Посмотрите демо-версию кода здесь и репозиторий здесь.

Здравствуйте, меня зовут Диого Батиста, я разработчик программного обеспечения, я работаю в @themainingredient в Амстердаме, и помимо того, что я делаю потрясающие вещи в TheMainIngredient, я хотел бы поделиться этим великолепием со всеми вами.

Если вам понравился этот пост и вы хотите узнать о нас больше, заходите на наш сайт! www.themainingredient.co

Для меня просто проверьте меня на Linkedin: www.linkedin.com/diogobatista, иногда я публикую некоторые личные инструменты или классные проекты, которые мне нравятся.