Предоставление сторонних методов lib (Firepad) в компоненте React
Я искал ответы на эти вопросы уже пару недель и прочитал все, что смог найти (в SO, в документах React, в источнике для связанных библиотек, таких как response-codemirror и т. Д.), и не могу найти ответ, который я могу понять. Я немного слаб в Реакте, и это, вероятно, где я падаю.
Я работаю над проектом, созданным в React (под названием Pharaoh, браузер и редактор для настольных компьютеров, предназначенный для аудитории), который использует Firepad (и поэтому использует Firebase и CodeMirror, которые мне нравятся). Я немного использовал все вышеперечисленные технологии, включая написание редактора Markdown для настольных компьютеров с использованием CodeMirror и нескольких демонстрационных / практических приложений с использованием Firebase. Моя проблема здесь почти наверняка заключается в том, что я не совсем понимаю React.
То, что я пытаюсь сделать, - это получить возможность сохранять файлы из нашего экземпляра Firepad/CodeMirror (на рабочий стол). Я в целом знаю, как использовать FileReader и API файловой системы HTML5, и это может быть сделано даже с node-fs
, поскольку моя цель здесь - наше настольное приложение (которое работает на NW.js).
CodeMirror имеет несколько действительно полезных методов, таких как editorName.codeMirror.doc.getValue()
который будет работать отлично; Firepad имеет еще более простой editorName.firepad.getText()
(а также .setText()
который я также использовал для загрузки файлов из файловой системы). Я знаю, как они работают, и вижу, как я возьму то, что они вернут, и сохраню это, это не проблема. Моя проблема в том, что я не могу получить доступ к этим методам. Вероятно, это какая-то глупая вещь, которую я должен знать о доступе к методам из сторонних библиотек или из компонентов в целом, но я как-то озадачен этим. Инструмент, который я часто использую на работе, Codeshare.io, который, как мне кажется, встроен в React и использует Firepad, предоставляет эти методы, поэтому я собираюсь разобраться в их источнике (yay для cURL) и посмотреть, смогу ли я найти какой-либо ответы, но что-нибудь быстрее было бы очень полезно.
Большое спасибо!
Примечание: я думаю, мне нужно заработать больше ТАК репутации; удалил / переделал кучу ссылок перед публикацией.
1 ответ
Используйте эти npm packages
- brace
, react-ace
, firebase
, firepad
,
поскольку firepad
потребности ace
чтобы присутствовать глобально, перед импортом присвойте скобку глобальной переменной как (не лучшим образом, но работает) firepad
import brace from 'brace';
global.ace = brace;
global.ace.require = global.ace.acequire;
import Firepad from 'firepad';
использование ref
получить экземпляр ReactAce
и инициализировать его в componentDidMount
с помощью:
new Firepad.fromACE(this.firepadRef, this.aceInstance.editor, options);
Аналогично для CodeMirror
редактор.
Надеюсь, это поможет.