|
@@ -72,14 +72,13 @@ pub fn use_maybe_sync_selector<R: PartialEq, S: Storage<SignalData<R>>>(
|
|
#[track_caller]
|
|
#[track_caller]
|
|
#[must_use = "Consider using `use_effect` to rerun a callback when dependencies change"]
|
|
#[must_use = "Consider using `use_effect` to rerun a callback when dependencies change"]
|
|
pub fn use_selector_with_dependencies<R: PartialEq, D: Dependency>(
|
|
pub fn use_selector_with_dependencies<R: PartialEq, D: Dependency>(
|
|
- cx: &ScopeState,
|
|
|
|
dependencies: D,
|
|
dependencies: D,
|
|
f: impl FnMut(D::Out) -> R + 'static,
|
|
f: impl FnMut(D::Out) -> R + 'static,
|
|
) -> ReadOnlySignal<R>
|
|
) -> ReadOnlySignal<R>
|
|
where
|
|
where
|
|
D::Out: 'static,
|
|
D::Out: 'static,
|
|
{
|
|
{
|
|
- use_maybe_sync_selector_with_dependencies(cx, dependencies, f)
|
|
|
|
|
|
+ use_maybe_sync_selector_with_dependencies(dependencies, f)
|
|
}
|
|
}
|
|
|
|
|
|
/// Creates a new Selector that may be sync with some local dependencies. The selector will be run immediately and whenever any signal it reads or any dependencies it tracks changes
|
|
/// Creates a new Selector that may be sync with some local dependencies. The selector will be run immediately and whenever any signal it reads or any dependencies it tracks changes
|
|
@@ -105,15 +104,14 @@ pub fn use_maybe_sync_selector_with_dependencies<
|
|
D: Dependency,
|
|
D: Dependency,
|
|
S: Storage<SignalData<R>>,
|
|
S: Storage<SignalData<R>>,
|
|
>(
|
|
>(
|
|
- cx: &ScopeState,
|
|
|
|
dependencies: D,
|
|
dependencies: D,
|
|
mut f: impl FnMut(D::Out) -> R + 'static,
|
|
mut f: impl FnMut(D::Out) -> R + 'static,
|
|
) -> ReadOnlySignal<R, S>
|
|
) -> ReadOnlySignal<R, S>
|
|
where
|
|
where
|
|
D::Out: 'static,
|
|
D::Out: 'static,
|
|
{
|
|
{
|
|
- let dependencies_signal = use_signal(cx, || dependencies.out());
|
|
|
|
- let selector = *cx.use_hook(|| {
|
|
|
|
|
|
+ let mut dependencies_signal = use_signal(|| dependencies.out());
|
|
|
|
+ let selector = use_hook(|| {
|
|
maybe_sync_selector(move || {
|
|
maybe_sync_selector(move || {
|
|
let deref = &*dependencies_signal.read();
|
|
let deref = &*dependencies_signal.read();
|
|
f(deref.clone())
|
|
f(deref.clone())
|
|
@@ -141,7 +139,7 @@ pub fn selector<R: PartialEq>(f: impl FnMut() -> R + 'static) -> ReadOnlySignal<
|
|
pub fn maybe_sync_selector<R: PartialEq, S: Storage<SignalData<R>>>(
|
|
pub fn maybe_sync_selector<R: PartialEq, S: Storage<SignalData<R>>>(
|
|
mut f: impl FnMut() -> R + 'static,
|
|
mut f: impl FnMut() -> R + 'static,
|
|
) -> ReadOnlySignal<R, S> {
|
|
) -> ReadOnlySignal<R, S> {
|
|
- let state = Signal::<R, S> {
|
|
|
|
|
|
+ let mut state = Signal::<R, S> {
|
|
inner: CopyValue::invalid(),
|
|
inner: CopyValue::invalid(),
|
|
};
|
|
};
|
|
let effect = Effect {
|
|
let effect = Effect {
|
|
@@ -154,8 +152,7 @@ pub fn maybe_sync_selector<R: PartialEq, S: Storage<SignalData<R>>>(
|
|
}
|
|
}
|
|
state.inner.value.set(SignalData {
|
|
state.inner.value.set(SignalData {
|
|
subscribers: Default::default(),
|
|
subscribers: Default::default(),
|
|
- effect_subscribers: Default::default(),
|
|
|
|
- update_any: schedule_update_any().expect("in a virtual dom"),
|
|
|
|
|
|
+ update_any: schedule_update_any(),
|
|
value: f(),
|
|
value: f(),
|
|
effect_ref: get_effect_ref(),
|
|
effect_ref: get_effect_ref(),
|
|
});
|
|
});
|