#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
}