Есть ли в 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используется для.

Другие вопросы по тегам