#javascript #react-native #hook #use-state
#javascript #react-native #перехват #использование-состояние
Вопрос:
Я должен обновить состояние и использовать его в функции. Этого не происходит, потому что я не могу заставить его ждать в текущей системе. Он принимает предыдущие данные и запускает их. Как я могу его удержать?
Например, последнее значение страницы равно 1, когда 3. Выполняется щелчок, и он должен работать как 1 в getReports, но работает 3. Следующий — 1, но мне нужен этот момент.
const onClick = () => {
setReports([]);
setPage(1);
getReports(); <- use page and reports list
}
Комментарии:
1. Пожалуйста, уточните и добавьте как можно больше информации к вопросу, чтобы можно было дать адекватный ответ
Ответ №1:
Быстрое решение: получить предыдущее значение, увеличить его и обновить состояние этим новым значением. В следующей строке передайте то же увеличенное значение в качестве аргумента getReports(new Value)
. Здесь мы будем использовать состояния только для сохранения последнего номера / индекса.
Но если вы хотите использовать только состояния, тогда вам не getReports()
следует сразу вызывать, вместо этого вы можете использовать useEffect
для прослушивания изменений состояния, а затем вызывать метод при изменении. Что-то вроде:
const [page, setPage] = React.useState(0);
React.useEffect(() => {
getReports();
}, [page]);
const onClick = () => {
setReports([]);
setPage(1);
// If page number is always incrementing
setPage(page 1);
}
Комментарии:
1. мой профиль новый :’) баллы <15 не голосуют. В тот момент, когда я достигну 15 баллов: D
Ответ №2:
Установка состояния в React является асинхронной. Это связано с тем, что он повторно отображает dom (или его части), и любой код после setState
(или перехват) будет продолжать выполняться в обычном режиме. Забудьте о async await в том, что касается настройки состояния.
В вашем примере я должен просто передать номер страницы в функцию getReports. Насколько я могу судить, нет необходимости удерживать число в состоянии. Кроме того, вызов setReports([])
выглядит так, как будто он тоже не нужен, поскольку getReports должен, я полагаю, перезаписать его в любом случае.
Комментарии:
1. Я бы все равно не стал использовать страницу, но поскольку я использую список отчетов в flatlist, разве он не должен быть в состоянии?
2. Да, сохраните список отчетов в состоянии, вызвав setReports(data), где данные являются ответом на вызов api или откуда бы вы ни получали свои данные. Я предполагаю, что функция getReports() должна знать, на какой странице вы находитесь? Если это так, то передайте его в качестве параметра, а не получайте его из состояния. Если я неправильно понял, вам может потребоваться уточнить свой вопрос.