Die Antwort von Felix Kling ist ausgezeichnet. Ich möchte jedoch etwas mehr Kontext von Ramda hinzufügen.
Ramda (Disclaimer: Ich bin einer der Autoren) ist über funktionale Programmierung. Es versucht zwei Dinge zu tun: Es soll Javascript-Entwicklern den Weg zu Standard-FP-Praktiken erleichtern und es den Benutzern von FP-Sprachen erleichtern, mit Javascript zu arbeiten. Es gibt keinerlei Betonung auf Interoperabilität mit objektorientierten Codierungsstilen.
An einem Punkt versuchte Ramda sicherzustellen, dass bestimmte seiner Funktionen den this
Kontext beibehalten, der es ihnen ermöglichen würde, als OOP-Methoden verwendet zu werden. Aber wir lassen diesen Fokus völlig fallen; es war immer spekulativ gewesen, ohne irgendwelche Anfragen dafür, und als wir es versehentlich für einige Funktionen gebrochen hatten, hatten wir überhaupt keine Beschwerden. Es scheint wenig Grund dafür zu geben. Inzwischen erschwert es unsere Implementierung und beeinträchtigt die Leistung.Wenn wir also die Notwendigkeit finden, Funktionen neu zu schreiben, versuchen wir nicht mehr sicherzustellen, dass dies beibehalten wird.
Dies ist sinnvoll. Einige Leute sehen Ramda als Alternative zu Underscore oder Lodash, aber das schien uns immer schief zu stehen. Diese Bibliotheken stellen einige FP-Konzepte vor, sind jedoch so konzipiert, dass sie in Umgebungen mit mehreren Paradigmen arbeiten können, die gleichermaßen mit Imperativ-, OOP- oder FP-Codebasen zufrieden sind. Ramda ist anders, entworfen, um nur in funktionalen Systemen gut zu funktionieren. Es basiert vollständig auf der Idee, Systeme zu bauen, indem reine Funktionen zusammengesetzt werden.
Aus diesen Gründen, oben auf alles, sagte Felix, es gibt keinen wirklichen Grund zu erwarten, dass eine Ramda-Funktion Ihren this
Kontext aufrechterhalten wird.
Welche Syntax ist das? Der Code ist unvollständig und sieht nicht wie ES6 aus. Wenn Sie den Vorschlag für öffentliche Klasseneigenschaften verwenden, wird 'R.concat (this.state.parents, R.prop ('content'))' wahrscheinlich ausgewertet, bevor Sie 'this.state' setzen. Lösung: Verschieben Sie die Zuweisung "getContent" und "getParents" in den Konstruktor, nachdem Sie 'this.state' zugewiesen haben. –