В моем проекте this
больше не привязан при использовании стрелочных функций после обновления до React Native 26.
Если я не использую .babelrc
в приведенном ниже примере, он работает со стрелочными функциями. При добавлении .babelrc
функции стрелок больше не работают.
.babelrc
{
"passPerPreset": true,
"presets": [
{"plugins":["../schema/babelRelayPlugin"]},
"react-native",
]
}
Я также пробовал:
{
"passPerPreset": true,
"presets": [
{"plugins":["../schema/babelRelayPlugin"]},
"react-native-stage-0",
]
}
и
{
"passPerPreset": true,
"presets": [
{"plugins":["../schema/babelRelayPlugin"]},
"react-native",
{"plugins":["transform-es2015-arrow-functions"]},
]
}
Это ошибки
class NoArrow extends Component {
constructor(){
super();
this.state={x:0};
}
inc = ()=>{
this.setState({x:this.state.x+1});
}
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome} onPress={this.inc}>
Welcome to React Native! {this.state.x}
</Text>
</View>
);
}
}
Это работает
class NoArrow extends Component {
constructor(){
super();
this.state={x:0};
this.inc=this.inc.bind(this);
}
inc(){
this.setState({x:this.state.x+1});
}
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome} onPress={this.inc}>
Welcome to React Native! {this.state.x}
</Text>
</View>
);
}
}
При добавлении/удалении .babelrc
также запустите:
- сторож
- запуск npm --reset-кеш
- Я также редактирую файл (добавляю комментарий), чтобы убедиться, что он перекомпилируется.
Примечание: забавно, что это работает даже с .babelrc
class NoArrow extends Component {
constructor(){
super();
this.state={x:0};
}
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome} onPress={()=> this.setState({x:this.state.x+1})}>
Welcome to React Native! {this.state.x}
</Text>
</View>
);
}
}
Обновление 1
Внутри $TMPDIR удалите кешированный файл; у него есть хешированное имя, например 11acb28f1c8d3c6313ca5f8ccba3c158
Использование react-native-stage-0
могло решить проблему с функцией стрелки, но теперь Relay.QL больше не компилируется правильно.
{
"passPerPreset": true,
"presets": [
{"plugins":["../schema/babelRelayPlugin"]},
"react-native-stage-0"
]
}