Video není dostupné.
Omlouváme se.

derivedStateOf VS. remember(key) - THIS is Really the Difference 🤯

Sdílet
Vložit
  • čas přidán 20. 02. 2024
  • This video will show you the difference of derivedStateOf VS. remember(key).
    💻 Let me be your mentor and become an industry-ready Android developer in 10 weeks:
    pl-coding.com/drop-table-ment...
    ⭐ Courses with real-life practices
    ⭐ Save countless hours of time
    ⭐ 100% money back guarantee for 30 days
    ⭐ Become a professional Android developer now:
    pl-coding.com/premium-courses...
    Get my FREE PDF about 20 things you should never do in Jetpack Compose:
    pl-coding.com/jetpack-compose...
    Regular programming advice on my Instagram page: / _philipplackner_
    Join my Discord server:
    / discord
    Get the source code for this video on GitHub:
    github.com/philipplackner/rem...

Komentáře • 49

  • @stanleykou5643
    @stanleykou5643 Před 5 měsíci +23

    Your "20 things you should never do in Jetpack Compose" PDF was super useful. Jetpack compose is full of traps, and your tip is like a mine detector!

    • @ErnestoVega
      @ErnestoVega Před 5 měsíci +2

      How did you get it, please? I already got subscribed to the newsletter but I can't find nor get it anywhere.

    • @lr56c60
      @lr56c60 Před 5 měsíci +1

      Could you temporarily upload it to a cloud? I haven't been able to click the button for several weeks. I have tried different internet providers and devices. Thanks

    • @pelealexandru
      @pelealexandru Před 5 měsíci

      I want it as well. Where do we get it?

    • @lr56c60
      @lr56c60 Před 5 měsíci +1

      @@pelealexandru did you try phillip's page? I am asking here because the button to obtain the pdf on his page does not work for me.

    • @pelealexandru
      @pelealexandru Před 5 měsíci

      yes just tried it 10 minutes ago but didn't get the pdf @@lr56c60

  • @AdrianTache
    @AdrianTache Před 5 měsíci +30

    Compose always feels like such an unfinished project... I'd expect `remember` to handle all these kinds of edge cases under the hood and prevent recompositions as needed, rather than requiring all these clumsy hacks to either prevent or force recompositions, depending on the situation. Having said that, thanks for the video, it's a nice summary of these issues and how to solve them!

    • @ChrisAthanas
      @ChrisAthanas Před 5 měsíci +1

      The documentation is improving slowly and compose is definitely an improvement over the xml madness

    • @AdrianTache
      @AdrianTache Před 3 měsíci

      @@ChrisAthanas not sure I entirely agree, Compose just hides away a lot of what is still happening to views, turning annoying issues into hidden annoying issues. I'm still a fan, primarily because we're finally getting rid of states inside views (with some horrific exceptions, like how that stupid text selection can STILL crash your app because it get stuck in the wrong state sometimes), but it's probably going to be years until it's actually at a comparable level of stability with xml.

  • @Alchemist10241
    @Alchemist10241 Před 5 měsíci +4

    7:41 the best explanation I've ever heard or read that clarifies the use case of these two function, well done Philipp 👍

  • @callebdev
    @callebdev Před 5 měsíci +2

    Thanks a lot Philipp. I was also struggling to understand the difference between both of them.
    Your explanation was literally amazing! 💯

  • @زيد_اليماني
    @زيد_اليماني Před 5 měsíci +1

    I always watch your videos because they are very helpful and moreover you break things down in a clear and easy way, your pdf is amazing

  • @zeredantech2966
    @zeredantech2966 Před 14 dny

    Also i want to admit that remember with keys can be used in all cases, but when used with provided state(state in ViewModel or like in this video, provided by fun argument) it calls implicit get() on state, which adds it to the recomposition list, and if you are not going to subscribe to this state it will be more effective to use derivedStateOf(), because it adds only evaluation function to this list. But if you already have subscribed to the state there will be better to add state.value to remember key list, because it will anyway recompose and if not doing this, you can get a double-recomposition, i mean when state changes and we use derivedStateOf() it firstly recomposes our function, after this it recomposes evaluation, it changes too and here it is second recomposition of function due to change of derived state. But when you are having a provided argument value, which can change(not a state), the derivedStateof() couldn't subscribe to this and you will have to use remember with keys. Also all this is safe in state group cases, i mean that if you are having k states for evaluation and n states (n > k) for compose fun, when some of "useless" states changes it will not cause reevaluations, because in both cases(derivedStateof(), remember(keys)) we refresh only if our "usefull" k states updates

  • @alexeysimchenko7494
    @alexeysimchenko7494 Před 5 měsíci +1

    I knew that case but always is good to repeat) And I found out from this video that derivedStateOf is not updated if argument is updated and I need to pass such agrument as a key to remember. Thanks for mentioning that

  • @mahiainti678
    @mahiainti678 Před 5 měsíci +3

    at 12:03 if my understanding is correct you can alternatively explicitly pass isEnabledState as a state into derivedStateOf and not set keys in remember. In this way derivedStateOf would monitor both of the states inside of it. I.e. `derivedStateOf { state.firstVisibleItemIndex >= 5 && isEnabledState.value }`

    • @muhmmedalsadig7706
      @muhmmedalsadig7706 Před 5 měsíci

      I agree 👍

    • @osisuper98
      @osisuper98 Před 5 měsíci

      If you are going to pass state as a parameter, how are you supposed to change its value ?

    • @mahiainti678
      @mahiainti678 Před 5 měsíci

      @@osisuper98 just the usual way? state.value = newValue somewhere else

    • @jackeblan
      @jackeblan Před 5 měsíci

      It's better to put the isEnabled to if(showScrollToTopButton && isEnable)

    • @user-wt9vk2xo6v
      @user-wt9vk2xo6v Před 3 měsíci

      @@osisuper98 add another onValueChange callback

  • @user-lr1qk5gz3i
    @user-lr1qk5gz3i Před 5 měsíci +1

    Without bias, if you were to choose between compose or views, which one would you use in your project? For a better performance.

  • @mortezamgh1347
    @mortezamgh1347 Před 2 měsíci

    Thanks dear Philipp, very useful tutorial 👍

  • @LasradoRohan
    @LasradoRohan Před 5 měsíci +3

    You are reading my mind at this point

  • @chorvico
    @chorvico Před 5 měsíci

    Awesome explanation! Thanks for sharing this!

  • @stewie2k519
    @stewie2k519 Před 5 měsíci +1

    Hey, I've watched your video about Content Providers. I am currently working with one of them - Calendar Provider, developing a small calendar-app. Do you have any other videos on this topic or maybee you can reccomend some other sources where I can read/watch about this specific provider? Espicially about syncing calendars from local storage to a server and vice-versa. And another thing is - is there some library that provides a CalendarView like Google Calendar have (the monthly view grid with displayiing event's preview(titles) in each cell)? Thanks😅

  • @AdevAxmeddev
    @AdevAxmeddev Před 5 měsíci

    Thanks a lot Philipp Lackner. It is amazing...!

  • @SSG1239
    @SSG1239 Před 5 měsíci

    Hey Philipp, can you please make a video regarding content driven concepts & if possible some mini projects that will be a great help.

  • @mbpiku
    @mbpiku Před 5 měsíci

    This was really insightful, thanks 🙏

  • @tarsilacostalonga
    @tarsilacostalonga Před 5 měsíci

    You are the best!!

  • @ubersticks
    @ubersticks Před 5 měsíci +1

    How do I get the PDF? I am already a subscriber and the link seems to be only for new subscribers.

  • @-ECE-SOGATAKAR
    @-ECE-SOGATAKAR Před 5 měsíci

    Thanks you are doing great job ❤

  • @purplehazer417
    @purplehazer417 Před 5 měsíci

    Phillip, can you explain the difference between rememberUpdatedState(key) and remember(key) { mutableStateOf(key) }

  • @mark-147
    @mark-147 Před 5 měsíci +1

    How about if you put the >=5 inside the remember arg?

    • @fliamachado
      @fliamachado Před 5 měsíci

      Same question! I've that a loot, where the key is a boolean condition.

  • @amol1608
    @amol1608 Před 5 měsíci

    hey Philipp, the subscription for the free PDF is not working. I tried with one mail, never got a link. I tried with another mail (that was never subscribed), got a link, but the link from the email doesn't work, I get a 404.

  • @henrik908
    @henrik908 Před 5 měsíci

    No doubt why he is the king of Jetpack compose.

  • @neerajverma9226
    @neerajverma9226 Před 5 měsíci

    Can you explain out and in generics here? RequestState {}

  • @utkubilgin2818
    @utkubilgin2818 Před 5 měsíci

    Hi, I couldn't download the PDF

  • @WakeupDev.
    @WakeupDev. Před 3 měsíci

    Vivid and helpful

  • @pelealexandru
    @pelealexandru Před 5 měsíci

    Thanks!

  • @user-lx7fq2lw8j
    @user-lx7fq2lw8j Před 5 měsíci

    Sir i am learning jetpack compose to become android developer .Do i need to learn DSA to become android developer. Because at college placements we required DSA is it necessary

  • @mustafaammar551
    @mustafaammar551 Před 5 měsíci

    Thank you BRO

  • @varunagrawal5802
    @varunagrawal5802 Před 5 měsíci

    U saved, thanks

  • @raulprior9635
    @raulprior9635 Před 5 měsíci

    Amazing

  • @Revakovskyi
    @Revakovskyi Před 5 měsíci

    Thanks so much! You're the best!

  • @vitdemidenko
    @vitdemidenko Před 5 měsíci

    val state by)))))))

  • @5erTurbo
    @5erTurbo Před 5 měsíci

    4:30 I guess you could still do following and it would work same as using `derivedStateOf`? `remember(state.firstVisibleItemIndex >= 5)`