Как использовать статические переменные с реагирующими хуками - PullRequest
0 голосов
/ 01 марта 2019

С помощью const [open, setOpen] = useState(false) я могу создать переменную open, которая сохраняется при вызовах функционального компонента.

Но какой хук можно использовать, если я не хочу повторного рендеринга при установке переменной?

У меня есть пользовательский черновик:

const useVariable = (initialValue) => {
  const ref = useRef();


  return useMemo(() => {
    ref.current = [initialValue, (newValue) => { ref.current[0] = newValue }]
  }, [])
}

Но в соответствии с https://reactjs.org/docs/hooks-reference.html#usememo Я не могу полагать, что useMemo больше не вызывается.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Спасибо @ shubham-khatri, я нашел решение своего вопроса.Просто используйте initialValue хука useRef:

const useVariable = initialValue => {
  const ref = useRef([
    initialValue,
    param => {
      ref.current[0] = typeof param === "function"
        ? param(ref.current[0])
        : param
}
  ]);
  return ref.current;
};

https://codesandbox.io/s/v3zlk1m90

Редактировать: чтобы учесть комментарий Кристофера Кэмпа, я добавил, что также можно передавать функцию, как в useState.См использование в кодах и коробке

0 голосов
/ 01 марта 2019

Вы можете использовать useRef ловушку, если вы просто хотите сохранить некоторые данные в переменной и не выполнять повторный рендеринг, когда переменная установлена ​​

const unsubCallback = useRef(null);

if(!unsubCallback) {
    unsubCallback.current = subscribe(userId)
}
...