yewstack / yew

Rust / Wasm framework for creating reliable and efficient web applications
https://yew.rs
Apache License 2.0
30.53k stars 1.42k forks source link

TodoMVC not using localStorage #76

Closed wldcordeiro closed 6 years ago

wldcordeiro commented 6 years ago

The TodoMVC example isn't using localStorage to persist the todos like a typical implementation would.

wldcordeiro commented 6 years ago

A patch that I started, in case anyone else is interested in doing this.

diff --git a/examples/todomvc/src/main.rs b/examples/todomvc/src/main.rs
index 0e4fd57..ad4e962 100644
--- a/examples/todomvc/src/main.rs
+++ b/examples/todomvc/src/main.rs
@@ -8,6 +8,7 @@ extern crate yew;

 use strum::IntoEnumIterator;
 use yew::html::*;
+use yew::services::storage::{Scope, StorageService};

 #[derive(EnumIter, ToString, Clone, PartialEq)]
 enum Filter {
@@ -207,7 +208,9 @@ fn view_entry_edit_input((idx, entry): (usize, &Entry)) -> Html<Msg> {
     }
 }

-struct Context;
+struct Context {
+    store: StorageService,
+}

 fn main() {
     let mut app = App::new();
@@ -217,7 +220,15 @@ fn main() {
         value: "".into(),
         edit_value: "".into(),
     };
-    app.run(Context, model, update, view);
+    let mut ctx = Context {
+        store: StorageService::new(Scope::Local),
+    };
+    let x = match ctx.store.restore("test") {
+        Ok(s) => s,
+        Err(_) => "Nada".to_string(),
+    };
+    println!("{}", x);
+    app.run(ctx, model, update, view);
 }
therustmonk commented 6 years ago

@wldcordeiro Thank you for the issue! I've implemented this in #81 Could you check it?

therustmonk commented 6 years ago

This should work just as well since it updates the storage for each update to the model. In the JS solutions they do stuff where they access and update during creation/edit and on load.

It seemed to me that storing all the fool model is cooler, or do you think it is better to follow the standard implementation of TodoMVC? According to #5 we should not use this example to compare with other frameworks and it's better to have a separate benchmark implementation. In other words, we could improve TodoMVC like we want/can.

... but anyway, we could follow the standard implementation of TodoMVC. I have no ideas which approach is better )

therustmonk commented 6 years ago

Fixed by #116