Реактив: Как использовать useState с useMemo

#javascript #html #reactjs #react-native #react-hooks

Вопрос:

У меня есть функция с двумя параметрами, которая возвращает объект(палитру). Первый параметр-это индекс объекта в палитре, а второй параметр определяет, возвращать ли светлый или темный объект.

 const Theme = (index:String, DarkMode:Boolean) => {

const palette = {

background:{
light,
dark,
},

custom:{
light,
dark,
},

}
 
return(palette[index][DarkMode]);
} 

Затем в моем компоненте react я использую эту функцию для стилизации своего элемента.

 const [darkMode, setDarkMode] = useState(false); // state
const bg = Theme("background",darkMode); // function

// then in my component style

backgroundColor:`${bg.background}`, 

Затем у меня есть кнопка, которая переключает мое состояние темного режима, чтобы моя функция темы возвращала светлый объект вместо темного и наоборот, но проблема в том, что цвет фона моего компонента не меняется, даже когда меняется состояние.

Поэтому мой вопрос: «Как мне использовать React.useMemo для вызова моей функции и повторного отображения моего компонента при изменении состояния?».

Комментарии:

1. Поисковая реакция. Контекст и пример поставщика тем. Это неуместное использование useMemo.

2. @SamuelGoldenbaum Я знаю, что могу достичь этого с помощью useContext и createContext, но я просто изучал, есть ли другой способ достичь этого. Кроме того, я просто использую useMemo и useEffect в первый раз, поэтому я не совсем понимаю, каково было бы подходящее использование useMemo. Я проверил документы, но это просто не укладывается у меня в голове.

3. Запоминание-это просто способ кэширования результатов, когда вам предоставляется один и тот же набор параметров (зависимостей). Представьте себе функцию, которая выполняет приличный объем вычислений или должна совершать внешние вызовы и т. Д. Если вам снова дадут тот же набор параметров, то вы предпочли бы избежать повторного запуска полного процесса и вместо этого вернуть результат предыдущего вычисления.

4. useMemo используется, когда вы хотите запомнить возвращенное значение дорогостоящего/дорогостоящего вычисления.useCallback-это когда вы хотите запомнить саму функцию (т. Е. вы передаете ее в качестве реквизита и используете ее в эффекте использования ребенка… за, скажем) Я согласен с Сэмюэлем, useContext был бы самым идеальным решением.

5. Спасибо вам, ребята, за объяснение @SamuelGoldenbaum. Я просмотрел несколько видео на YouTube о крючках react и думаю, что теперь понимаю их лучше.