WbICHA, а хотя, вру, проблема реально есть, теперь не форматирует после перезапуска, точнее только если форматтер вообще вырубить и оставить только правила линтера в качестве форматтирования. Вместе с форматтером - нет, хм, попробую покопать на досуге.
WbICHA, не понимаю где вы видите проблему, добавил к типичному своему проекту на реакт это правило линтера и при форматировании автоматом добавляется нужное кол-во строк после последнего импорта, указанное в конфиге. Плюс линтер выводит ошибку в старых файлах, что кол-во пустых строк после импорта меньше: Expected 3 empty lines after import statement not followed by another import.
И при сохранении также автоматом добавляет недостающие строки.
WbICHA, в качестве форматтера обычно юзают prettier, а он нормально интегрируется с eslint, в итоге его можно сконфигурировать и он не будет форматировать так, чтобы нарушались стилистические правила линтера, при этом останется все остальное форматирование
ForSureN1, проверить в последнем else, что j уже равен последнему элементу массива и тогда только вызывать alert. И не использовать for in для перебора массива, т.к. он не гарантирует порядок индексов.
Конвертнуть в текст или html и вытащить потом нужные данные, есть куча библиотек для node js для конвертации pdf, например, pdf-parse, pdf2json, но они по большей части используют мозилловский pdf.js
Подозреваю, что проблема в https и запрос на http://localhost:5000/add-user/ будет работать. Для https нужен ssl сертификат, а в коде сервера не вижу создания https сервера.
sema-fedotov, не, так точно не надо. В данном случае решение с ref вполне нормальное, мне кажется.
Еще, тут в примере состояние хранится в верхнеуровневом компоненте App, при смене статуса все приложение будет перерисовываться, так и задумано было? И если приложение на всю страницу работает, то в этом случае клик лучше навешивать на верхнеуровневый элемент в App, на div, например, который будет во весь вьюпорт, тогда реф не нужен будет.
sema-fedotov, можно, только все таки желательно бы знать подробности где getStatus используется, а то я то предположил единственный вариант, что функция используется в каком-то браузерном обработчике событий, но что-то засомневался.
WbICHA, я так понимаю, у него eventListener юзает функцию getStatus, иначе вряд ли такой вопрос бы задавался. Тем более, что при каждом обновлении статуса функция getStatus бы итак обновлялась и при вызове ее без всякого useCallback в ней выводился бы последний статус.
keyotor, а что именно должно быть не ок? Вы же в любом случае не храните пароли, как вы сказали. Не, ну если у вас на фронт выплевывается какой-нибудь ответ на секретный вопрос или что-то типа того, что очень сомнительно, так что данные про которые вы говорите по сути не критичные и на основании их приложение злоумышленнику не взломать. Имя пользователя ничего злоумышленнику не даст, его и другими путями можно получить. Да и с большей вероятностью важные данные будет перехвачены с сервера с помощью какой-нибудь CSRF-атаки, чем из локальных данных приложения, из самого приложения данные будет вытащить намного сложнее.
Если что любой, кто пользуется вашим приложением при желании может исходный код его получить, даже минифицированный, да еще с учетом, что многие сурс мапы оставляют в проде, что совсем печаль.
Поэтому, а) ничего страшного в хранении каких-то данных в компонентах нет, б) но ничего критичного, что помогло бы злоумышленнику взломать ваше приложение хранить все же не стоит.
Егор Живагин, а разве в такой реализации, как сейчас, не будет dispatch передаваться 1м параметром в setCart, если mapDispatchToProps просто в функцию dispatch оборачивает?
Если коротко:
Создаете Blob с нужными данными и типом text/plain.
Создаете фейковую ссылку с атрибутом download и названием файла с его расширением (test.txt) и сами же через js на нее кликаете.
Браузер предложит сохранить этот файл.
Чтобы самому не мучаться с разными браузерами есть библиотека FileSaver.js, но она примерно тоже самое и делает.