Есть ли в Solid JS аналог React.useCallback?
У Solid есть createMemo , который, как я думал, может работать, но он говорит: «Функция memo не должна изменять другие сигналы, вызывая сеттеры (она должна быть «чистой»)», что не подходит для моего варианта использования.
1 ответ
У Solid нет, потому что компоненты монтируются только один раз и не перерисовываются, у React есть
useCallback
чтобы у разработчиков был другой способ предотвратить повторный рендеринг.
цель состоит в том, чтобы кэшировать производный сигнал, например, извлечение сигнала, который запускает дорогостоящее значение Фибоначчи .
const [count, setCount] = createSignal(0);
const fib = createMemo(() => fibonacci(count()));
Как вы заметили,
createMemo
не должен вызывать другие установщики сигналов, это сделано для того, чтобы Solid мог оптимизировать, например, все заметки могут обновляться не более одного раза в ответ на изменение зависимости.
const [count, setCount] = createSignal(0);
const [lastName, setLastName] = createSignal('');
const fib = createMemo(() => {
setLastName(value) // DONT DO THIS, memo function should not call other signal setters, should be pure
return fibonacci(count());
});
Если ваш вариант использования требует получения значений и вызова сеттеров, вот что
useEffect
используется для.