12345678910111213141516171819202122232425262728293031323334353637 |
- //! Handle async streams using use_future and awaiting the next value.
- use async_std::task::sleep;
- use dioxus::prelude::*;
- use futures_util::{future, stream, Stream, StreamExt};
- fn main() {
- dioxus::launch(app);
- }
- fn app() -> Element {
- let mut count = use_signal(|| 10);
- use_future(move || async move {
- // Create the stream.
- // This could be a network request, a file read, or any other async operation.
- let mut stream = some_stream();
- // Await the next value from the stream.
- while let Some(second) = stream.next().await {
- count.set(second);
- }
- });
- rsx! {
- h1 { "High-Five counter: {count}" }
- }
- }
- fn some_stream() -> std::pin::Pin<Box<dyn Stream<Item = i32>>> {
- Box::pin(
- stream::once(future::ready(0)).chain(stream::iter(1..).then(|second| async move {
- sleep(std::time::Duration::from_secs(1)).await;
- second
- })),
- )
- }
|