Приведи пример неоптимального использования RecyclerView

Ответ

Ответ не найден

Ответ 18+ 🔞

А, ну ты попал, дружище! Сейчас я тебе такую простыню накатаю, что сам потом офигеешь. Сиди, слушай, не перебивай.

Значит, история такая, блядь. Есть у нас в JavaScript такая штука — this. И вот эта сука, ёпта, ведёт себя как последняя манда с ушами. Ты думаешь, что она всегда указывает на объект, в котором функция объявлена? А вот нихуя! Она, эта хитрая жопа, указывает на то, кто её вызвал. Понимаешь разницу? Это как если ты позвал кота: «Кис-кис!», а к тебе прибежал соседский пёс и начал тебе в штаны срать. Вот это и есть this. Полная непредсказуемость, волнение ебать.

Смотри, вот пример, от которого у меня терпения ноль ебать:

const user = {
  name: 'Вася',
  sayHi() {
    console.log(`Привет, я ${this.name}`);
  }
};

user.sayHi(); // Всё ок, выведет "Привет, я Вася". `this` — это `user`.

Вроде логично, да? this внутри sayHi — это объект user. Но теперь, блядь, смотри сюда:

const greet = user.sayHi; // Скопировали метод в переменную, БЕЗ вызова!
greet(); // Выведет "Привет, я undefined". Потому что `this` теперь — глобальный объект (или `undefined` в strict mode).

Видишь, что происходит? Мы просто взяли функцию и вызвали её отдельно от объекта. И this тут же накрылся медным тазом. Она потеряла контекст, как пьяный мужик в подворотне теряет ключи от квартиры. Это называется «потеря контекста», и это, блядь, главная причина, почему все так ненавидят this.

А теперь представь, что ты передаёшь этот метод как колбэк, например, в setTimeout:

setTimeout(user.sayHi, 1000); // Через секунду: "Привет, я undefined". Охуеть, да?

Функция user.sayHi передаётся внутрь setTimeout, а когда таймер срабатывает, он вызывает её сам, от своего имени. И контекст — прощай! Это пиздец, Карл.

Так как же с этим бороться, спросишь ты? А вот так, ёбаный в рот!

  1. Привязка через .bind(). Это как приковать this наручниками к нужному объекту.

    const boundSayHi = user.sayHi.bind(user); // Намертво привязали `this` к `user`
    setTimeout(boundSayHi, 1000); // Теперь выведет "Привет, я Вася". Ура!
  2. Стрелочные функции. Вот это, блядь, спасение. Они не имеют своего this. Они берут его из окружающего контекста, как умные дети, и больше не теряют. Это как кот, который привязан к дому верёвочкой.

    const user = {
      name: 'Вася',
      sayHi() {
        // Стрелочная функция внутри берёт `this` из sayHi, то есть из `user`
        setTimeout(() => console.log(`Привет, я ${this.name}`), 1000);
      }
    };
    user.sayHi(); // Через секунду: "Привет, я Вася". Красота!

Короче, чувак, мораль всей этой басни про this проста, как три копейки: если не хочешь неожиданностей — либо бинди всё нахуй, либо используй стрелочные функции. И тогда этот хуй с горы перестанет тебе мозги выносить. А иначе будешь как тот Гамлет, только вместо «быть или не быть» у тебя будет «undefined или не undefined». Всё, я устал, иди делай домашки.