Какой тип значения передается в функцию setState?

#reactjs

Вопрос:

Я видел обучающее видео React со следующим кодом:

 const [darkTheme, setDarkTheme] = useState(true)
  
function toggleTheme() { 
    setDarkTheme(prevDarkTheme => !prevDarkTheme)
}
 

В последней строке, что передается в качестве параметра функции setDarkTheme? Я думал, что функции нужно одно значение, поэтому не могу сказать, является ли это функцией со стрелкой, которая оценивается перед ее передачей, или что.

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

1. Функция передается как единственное значение: reactjs.org/docs/hooks-reference.html#functional-updates

2. В последней строке, что передается в качестве параметра функции setDarkTheme? Функция со стрелкой, которая имеет в качестве параметра предыдущее значение darkTheme .

Ответ №1:

setState принимает либо значение, либо функцию

и когда он получит функцию, эта функция будет вызвана с предыдущим состоянием

и обратите внимание, что очень рекомендуется всегда передавать функцию, чтобы убедиться, что вы правильно меняете состояние

НЕ ДЕЛАЙ

     setDarkTheme(!prevDarkTheme)

 

ЦВ

     setDarkTheme(prevDarkTheme => !prevDarkTheme)
 

Ответ №2:

 setDarkTheme(prevDarkTheme => !prevDarkTheme)
 

prevDarkTheme вот фактическое значение этого состояния. Мы должны использовать функцию здесь, когда может быть вероятность того, что что-то еще может изменить это состояние за это время. Используя prevDarkTheme его, вы всегда уверены, что это последнее значение. Вы можете прочитать больше об этом здесь

Ответ №3:

его текущее значение в переменной состояния. в этом случае это будет true

 function toggleTheme() { 
    setDarkTheme((prevDarkTheme /* true */ ) => !prevDarkTheme /* !true -> false*/) // false
}