ich reagieren-native verwenden und reagieren Relais, deshalb habe ich die folgende .babelrc Datei:Gebrochene Autobinding in Pfeilfunktion für referenzierten Knotenmodule, wenn sie mit reagieren-native Verwendung reagieren Relais
{
"sourceMaps": "both",
"presets": [
"./plugins/babelRelayPlugin",
"react-native"
],
"passPerPreset": true
}
Das Hinzufügen einer Abhängigkeit, die Pfeilfunktionen in ihren Komponenten als MKIconToggle von reactive-native-material-kit (https://github.com/xinthink/react-native-material-kit) verwendet, wird nicht korrekt übertragen und die Referenz ist verloren/falsch.
Der ursprüngliche Code, der letztlich den Fehler verursacht, sieht wie folgt aus:
_onLayout = (evt) => {
this._onLayoutChange(evt.nativeEvent.layout);
if (this.props.onLayout) {
this.props.onLayout(evt);
}
};
Das betroffene Codefragment im Fehlerfall:
d(55, function(global, require, module, exports) {var _this = this,
_jsxFileName = '.../node_modules/react-native-material-kit/lib/mdl/Ripple.js';
var Ripple = function (_Component) {
babelHelpers.inherits(Ripple, _Component);
function Ripple(props) {
babelHelpers.classCallCheck(this, Ripple);
var _this2 = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Ripple).call(this, props));
_this2._onLayout = function (evt) {
_this._onLayoutChange(evt.nativeEvent.layout);
if (_this.props.onLayout) {
_this.props.onLayout(evt);
}
};
Das _this Referenzfenster entspricht, aufgrund der Verwendung von _dies wird _this2 erstellt und verwendet, aber _dies wird noch in den Pfeilfunktionen verwendet (_onLayout)
Wenn ich die babelrc Datei lösche und der Standard läuft Ich erhalte die folgenden transpiled JS und es funktioniert:
__d(921, function(global, require, module, exports) {var jsxFileName='...../node_modules/react-native-material-kit/lib/mdl/Ripple.js';
Component=React.Component;var Animated=React.Animated;var View=React.View;var PropTypes=React.PropTypes;var Platform=React.Platform;var Ripple=function(_Component){
babelHelpers.inherits(Ripple,_Component);
function Ripple(props){babelHelpers.classCallCheck(this,Ripple);
var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Ripple).call(this, props));
_this._onLayout=function(evt){
_this._onLayoutChange(evt.nativeEvent.layout);
if(_this.props.onLayout){
_this.props.onLayout(evt);}};_this.
Ich bin nicht wirklich sicher, was das Problem verursacht, kann ich es beheben, indem die Funktion in den Konstruktor verbindlich, aber ich möchte lieber nicht Code in Abhängigkeiten direkt ändern . Ich habe bereits versucht, verschiedene Voreinstellungen zu dem babel conf hinzuzufügen: es2015, stage-0, babel-voreingestellt-reagieren-native-stage-0 und einige andere ohne Glück.
Lustig ist, dass dieses Verhalten nicht in allen Abhängigkeiten auftritt und auch nicht in meinem eigenen Code, wenn ich nur eine einzelne Komponente mit einer Pfeilfunktion darin schreibe und die babelrc nutze, funktioniert es noch.
Ich bin nicht in der Lage, dieses Verhalten zu 100% zu reproduzieren, ich habe es auch mit anderen Abhängigkeiten gesehen, aber es scheint zu kommen und zu gehen, auch wenn es einmal auftritt, verschwindet es normalerweise nicht mehr.
Haben Sie es behoben? –