Fixed the TagSelector reactivity.

use_server_future was not reliably re-running when url_tag changed during
direct URL navigation, causing tags to remain unselected. use_resource
provides consistent reactivity across all navigation methods and handles
both data fetching and selection logic atomically.
This commit is contained in:
2025-09-27 13:21:56 -04:00
parent c73c99bf48
commit e7969c8050
4 changed files with 183 additions and 124 deletions

View File

@ -7,34 +7,12 @@ use crate::page::Page;
fn convert_categories(categories: &str) -> HashSet<String>
{
categories
.split('+')
.filter(|s| !s.is_empty() && *s != "all")
.map(str::to_string)
.collect()
}
/// Blog page
#[component]
pub fn Blog(tag: ReadOnlySignal<String>) -> Element
{
let mut show_all: Signal<bool> =
use_signal(|| tag().is_empty() || tag() == "all");
let mut categories: Signal<HashSet<String>> =
use_signal(|| convert_categories(&tag()));
use_effect(move ||
{
let new_tags = convert_categories(&tag());
categories.set(new_tags);
});
println!("Blog Categories: {:?}", categories());
use_signal(|| HashSet::new());
rsx!
{
@ -47,13 +25,13 @@ pub fn Blog(tag: ReadOnlySignal<String>) -> Element
BlogList
{
tags: categories.clone()
tags: categories
}
TagSelector
{
show_all: show_all.clone(),
toggled_tags: categories.clone()
url_tag: tag,
toggled_tags: categories
}
}
}