Was ist die empfohlene Methode, um native Javascript-Bibliotheken in React Native zu verwenden? Gibt es spezielle Einschränkungen?
Was ist die empfohlene Methode, um native Javascript-Bibliotheken in React Native zu verwenden? Gibt es spezielle Einschränkungen?
Antworten:
Kinderleicht! Führen Sie im Stammverzeichnis Ihres Projekts einfach Folgendes aus:
npm install moment --save
Dann können Sie es in Ihren Code importieren:
import moment from 'moment';
var now = moment().format();
Die Einschränkungen wären alles, was versucht, den Browser zu "erreichen" (was in diesem Zusammenhang nicht existiert). Deshalb gibt es Polyfills für Dinge wie XHR.
Die offizielle Dokumentation enthält Beispiele zur Verwendung der Moment-Bibliothek
require('lodash')
ist ein leeres Objekt. Ich habe auch 'lodash-node' ausprobiert.
Einige der momentanen Methoden funktionieren in React Native, andere nicht. Ich vermute, es hat mit Zuhörern zu tun.
Ich kann Moment zum Formatieren verwenden:
moment(new Date()).format("YYYY-MM-DD hh:mm:ss")
Aber nicht für die aktive Formatierung:
moment(new Date()).format("YYYY-MM-DD hh:mm:ss").fromNow()
Wenn Sie moment.js speziell für "Reagieren" oder "Reagieren" verwenden möchten react-moment
, sehen Sie sich unter https://github.com/headzoo/react-moment eine Reaktionskomponente für die Momentbibliothek an .
Führen Sie Folgendes aus, um React-Moment in React Native zu verwenden:
npm install --save moment react-moment
Dann in der Datei möchten Sie Moment verwenden:
import Moment from 'react-moment';
Verwenden Sie es schließlich wie gewünscht, zum Beispiel:
<Moment element={Text} fromNow>
{ post.datePublished }
</Moment>
Die Requisite element={Text}
ist speziell für reaktive native. Es stellt sicher, dass die resultierende Zeichenfolge in einer Text
Komponente gerendert wird . Ohne dies würde eine native Reaktion einen Fehler auslösen.
element={Text}
Dieses Ding hat meinen Fehler behoben. Danke !!
Es sieht so aus, als ob einige npm-Module derzeit nicht mit dem Packager kompatibel sind . Ich habe mich noch nicht wirklich mit dem Warum befasst, aber ich habe darauf zurückgegriffen, einen Anbieterordner zu haben und über die Webversion zu kopieren, aber ganz oben, speziell zu setzen
/**
* @providesModule moment
*/
Und unten ändern Sie es bis zu:
module.exports = moment;
Ich bin mir noch nicht sicher, ob dies der richtige Weg ist, aber die Verpackung ist für alle noch ziemlich neu.