Почему я могу использовать this.state без необходимости связывать или использовать функцию стрелки React
Я знаю, что функции стрелок наследуют контекст родителя, поэтому они так полезны в React. Тем не менее, у меня есть этот компонент React:
import React, { Component } from 'react';
import { View, Text } from 'react-native';
import axios from 'axios';
class AlbumList extends Component {
constructor(props) {
super(props);
this.state = {
albums: [],
};
axios.get('https://rallycoding.herokuapp.com/api/music_albums')
.then(response => {
this.setState({ albums: response.data });
});
}
renderAlbums() {
const { albums } = this.state;
const array = albums.map(album => (
<Text>{album.title}</Text>
));
return array;
}
render() {
return (
<View>
{ this.renderAlbums() }
</View>
);
}
}
export default AlbumList;
А также { this.renderAlbums() }
работает полностью нормально без меня, чтобы преобразовать renderAlbums()
в функцию стрелки. Я читал другие ответы на stackru, но все они упоминают, что вам нужна функция стрелки или bind
Для того чтобы this
работать правильно. Но в моем случае все работает нормально, так зачем использовать функцию стрелки внутри класса es6?
2 ответа
Если вы используете функции стрелок, то, что это "это", определяется блоком, в котором определена функция. Если вы используете "нормальные" функции, тогда "это" определяется местом, из которого вызывается функция. В этом случае вы вызываете его из метода рендеринга, поэтому "this" все еще является экземпляром компонента. Если вы попытаетесь вызвать подобную функцию из чего-то наподобие кнопки onClick, то не удастся найти "setState", поскольку "this" в основном будет определяться фактической визуализированной кнопкой, а не классом реакции.
Просто стрелки функции наследуют this
из области видимости их родителей, но обычные функции наследуют this
откуда функция вызывается