@MarvinD

Как понять что делает this?

Хочу уточнить у понимающих, правильно ли я понимаю прикол с this в этом куске кода (точнее в getData):
class Movies extends React.Component {
                constructor(props) {
                    super(props);
                    this.state = {
                      movies: []
                    };
                    //this.processRequest = this.processRequest.bind(this);
                }
                componentDidMount() {
                    this.getData();
                }
                getData = () => {
                   let _this = this
                   fetch('https://reactnative.dev/movies.json')
                   .then(
                        response => {
                          if (response.status !== 200) {
                            console.log('Looks like there was a problem. Status Code: ' + response.status);
                            return;
                          }
                          response.json().then(
                            data => {
                              _this.setState({movies: data.movies})
                            }
                          );
                        }
                      )
                      .catch(function(err) {
                        console.log('Fetch Error :-S', err);
                   });
                }
                renderData = () => {
                    let data = "Loading..."
                    if(this.state.movies.length === 0) {
                        return data;
                    }
                    return this.state.movies.map(data => (
                        <li key={data.id}>{data.title}</li>
                    ));
                }
                render() {
                    var moviesStyle = {
                        fontFamily: "sans-serif",
                        fontWeight: "bold",
                        fontSize: 12,
                        padding: 10,
                        margin: 0
                    };
                    
                    return (
                        <div>
                          <h2>Movies:</h2>
                          <ul>
                          {this.renderData()}
                          </ul>
                        </div>
                    );
                }
            }

Как я понимаю:
getData = () => {
                   let _this = this

означает, что _this в этом месте привязан не к блоку getData, а к родительскому классу Movies? И, соотв., задание переменных из json относится именно к переменным, заданным в конструкторе класса Movies. А если бы функция getData задавалась бы так:
getData() {
...
}

то this относилось бы к содержимому getData() а не класса Movies?

И закомментированная строка удаленной ныне функции this.processRequest = this.processRequest.bind(this) по сути также биндит "корневой this" к "this внутри функции processRequest для тех же целей - область видимости переменных?

PS: Я с php прямолинейного свалился в этот "кошмар", пытаюсь осознать основные "приколы" JS...
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
В getData есть лишняя строка let _this = this. Она напоминает о старых добрых временах, когда девки были зеленее. Сейчас можно её выкинуть и использовать this напрямую. Он и так биндится всеми стрелочными функциями внутри, и будет указывать на объект компонента.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы