set: function(target, property, value) {
if (property === 'age' && value < 0) {
console.error('Age cannot be negative');
} else {
target[property] = value;
}
}
А вот что про метод set у прокси говорит дока: The set() method must return a Boolean indicating whether or not the assignment succeeded. Many operations, including using property accessors in strict mode, throw a TypeError if the [[Set]] internal method returns false
потому что идёт обращение к count.value, которое именно при таком обращении перерисовывает компонент) почитайте доку, если вам нужно текущее значение без триггера, то нужно использовать signal.peek()
И при изменении переменной count будет перерисовываться только SomeComponent1. В сравнении с тем же Effector, возможность создавать экземпляры локальных сторов, которые ещё и не аффектят изменения всех дочерних компонентов из коробки - крутая фишка)
Больше всего меня удивило, что вы не обратили внимание на signal - https://www.npmjs.com/package/@preact/signals-react. У которого даже скачиваний больше, чем у Effector) Он обладает почти всеми "преимуществами" эффектора, которые были упомянуты в этой статье, вдобавок прекрасно себя чувствует при использовании в качестве экземпляра чего-то более крупного. Более того, не знаю как, это чудо умеет перерисовывать ноды напрямую, без перерисовки всего компонента(и его потомков), без запуска методов жизненного цикла, без проверок различных массивов зависимостей прочих хуков. При этом у сигнала есть свой эффект, если нам нужно не только на уровне перерисовки DOM, но и на уровне запуска какого-то кода отреагировать на изменение состояния сигнала. А то всё mobx, mobx)
Могу ошибаться, но будто бы с решением прекрасно справились Map и Set. И lodash тут не нужен, и пайпы. Без шуток, одной из тех.задач на прошедшей неделе было выпиливание lodash из проекта)
const handleEvent = useCallback(() => {
// используем предыдущее состояние внутри setCount
setCount(prevCount => prevCount + 1);
// оставляем массив зависимостей пустым, что позволяет избежать
// пересоздания ссылки на handleEvent
}, []);
// profit?
? И всё, нет пересоздаваемых ссылок на функции, нет созависимых замыканий, сколько бы useCallback вы ни использовали
Немножко добавлю: здесь вообще не нужен useCallback, вы совершенно ничего не сэкономили таким образом, потому что не передаёте мемоизированную функцию вниз по дереву компонентов. Её мемоизация буквально ни на что не влияет. Да ещё и ссылки на setCountA и setCountB всегда останутся прежними, потому что реакт их в принципе не меняет между рендерами, только ссылки на сам стейт. Возможно мысль и здравая, но примеры ужасны
подскажите, как это будет работать, если мы передаём не объекты разной формы, а просто разный набор аргументов? к примеру, функция получает рандомный набор чисел(от двух до бесконечности) и возвращает их сумму. за материал спасибо, крайне интересно
всё куда проще - я неверно истолковал написанное) речь была о человеке, который проходит собеседование с вебкой, и интервьюерах, которые проводят это собеседование, но без вебки. я же прочёл наоборот, будто человек проводит собеседования с вебкамерой, и сетует, что кандидаты приходят без)
А вот что про метод set у прокси говорит дока: The
set()method must return aBooleanindicating whether or not the assignment succeeded. Many operations, including using property accessors in strict mode, throw aTypeErrorif the[[Set]]internal method returnsfalseПодскажите, дефолтные экспорты компонентов - это необходимость в SolidJS? Как например отсутствие деструктуризации пропсов
я резко осознал, с кем имею дело. умываю руки)
Я наврал, вопрос решается так
теперь с реактивностью всё в порядке?) такое ощущение, что вы изо всех сил стараетесь найти минусы вместо того, чтобы хотя бы рассмотреть плюсы
потому что идёт обращение к count.value, которое именно при таком обращении перерисовывает компонент) почитайте доку, если вам нужно текущее значение без триггера, то нужно использовать signal.peek()
https://stackblitz.com/edit/vitejs-vite-a2zysg?file=src%2FApp.tsx&terminal=dev вот, поиграйтесь. Ни одного лога после всех рендеров
Он перерисовался, как бы это сказать...без ведома реакта) даже профайлер не покажет перерисовку
к примеру
уже не покажет никаких логов. Более того, вы можете сделать к примеру так
И при изменении переменной count будет перерисовываться только SomeComponent1. В сравнении с тем же Effector, возможность создавать экземпляры локальных сторов, которые ещё и не аффектят изменения всех дочерних компонентов из коробки - крутая фишка)
Это неправда) благодаря { useSignals } from "@preact/signals-react/runtime" оно прекрасно работает в реакте
Больше всего меня удивило, что вы не обратили внимание на signal - https://www.npmjs.com/package/@preact/signals-react. У которого даже скачиваний больше, чем у Effector) Он обладает почти всеми "преимуществами" эффектора, которые были упомянуты в этой статье, вдобавок прекрасно себя чувствует при использовании в качестве экземпляра чего-то более крупного. Более того, не знаю как, это чудо умеет перерисовывать ноды напрямую, без перерисовки всего компонента(и его потомков), без запуска методов жизненного цикла, без проверок различных массивов зависимостей прочих хуков. При этом у сигнала есть свой эффект, если нам нужно не только на уровне перерисовки DOM, но и на уровне запуска какого-то кода отреагировать на изменение состояния сигнала. А то всё mobx, mobx)
Могу ошибаться, но будто бы с решением прекрасно справились Map и Set. И lodash тут не нужен, и пайпы. Без шуток, одной из тех.задач на прошедшей неделе было выпиливание lodash из проекта)
https://habr.com/ru/articles/774548/ более подробный разбор
Стоп, а почему не
? И всё, нет пересоздаваемых ссылок на функции, нет созависимых замыканий, сколько бы useCallback вы ни использовали
Немножко добавлю: здесь вообще не нужен useCallback, вы совершенно ничего не сэкономили таким образом, потому что не передаёте мемоизированную функцию вниз по дереву компонентов. Её мемоизация буквально ни на что не влияет. Да ещё и ссылки на setCountA и setCountB всегда останутся прежними, потому что реакт их в принципе не меняет между рендерами, только ссылки на сам стейт. Возможно мысль и здравая, но примеры ужасны
@victor-homyakov выше доказал, что всё-таки замедляет
Ваша правда, выпиливал в другой песочнице)
Ну вот, и здесь обманули. Спасибо)
Если речь про StrictMode, то я намеренно его выпилил из песочницы
Не только функции, но и массив зависимостей создаётся заново при каждом рендере. Об этом написано в статье, на которую я ссылаюсь в самом начале)
Именно этот случай я и описал в начале статьи, как верный способ использования useCallback
подскажите, как это будет работать, если мы передаём не объекты разной формы, а просто разный набор аргументов? к примеру, функция получает рандомный набор чисел(от двух до бесконечности) и возвращает их сумму. за материал спасибо, крайне интересно
всё куда проще - я неверно истолковал написанное) речь была о человеке, который проходит собеседование с вебкой, и интервьюерах, которые проводят это собеседование, но без вебки. я же прочёл наоборот, будто человек проводит собеседования с вебкамерой, и сетует, что кандидаты приходят без)