обновили стейт -> он полетел в .observe -> эдит.setText (цикл)
Пока композа нету я сохраняю во вью ссылку на последний стейт:
private var mLastConsumedState: MyState? = null
обновляю его в конце каждого .observe
очищаю в onDestroyView()
Благодаря этому могу дифать , сравнивая новый и старый. примитивы обычным сравнением ==, а объекты референс чеками ===.
Это работает только потому, что стейт полностью иммутабельный.
п.с. кешировать стейт нужно именно мембером класса (ссылкой), без всяких hashmap, т.к. референс может меняться при шаманстве сборщика мусора.
п.с. в РХ есть оператор .scan
референс будет меняться при любом обновлении стейта, т.к. живем с иммутабельным состоянием
Обсуждают сегодня