Edit: Мне просто пришло в голову, что, вероятно, нет необходимости сбрасывать переменную в хуке useEffect
. На самом деле, фактическое значение stateTheCausesUseEffectToBeInvoked
скорее всего несущественно. Для всех намерений и целей это просто способ запуска useEffect
.
Допустим, у меня есть функциональный компонент React, состояние которого я инициализирую с помощью ловушки useEffect
. Я звоню в сервис. Я получаю некоторые данные. Я фиксирую эти данные, чтобы заявить. Круто. Теперь, скажем, я позже буду взаимодействовать с той же службой, за исключением того, что на этот раз вместо того, чтобы просто получать список результатов, я СОЗДАЮ или УДАЛЯЮ один элемент результата, тем самым изменяя весь набор результатов. Теперь я wi sh, чтобы получить обновленную копию списка данных, которые я получил ранее. На этом этапе я бы хотел снова запустить хук useEffect
, который использовал для инициализации состояния моего компонента, потому что я хочу перерисовать список, на этот раз с учетом вновь созданного элемента результата.
const myComponent = () => {
const [items, setItems] = ([])
useEffect(() => {
const getSomeData = async () => {
try {
const response = await callToSomeService()
setItems(response.data)
setStateThatCausesUseEffectToBeInvoked(false)
} catch (error) {
// Handle error
console.log(error)
}
}
}, [stateThatCausesUseEffectToBeInvoked])
const createNewItem = async () => {
try {
const response = await callToSomeService()
setStateThatCausesUseEffectToBeInvoked(true)
} catch (error) {
// Handle error
console.log(error)
}
}
}
Надеюсь, вышесказанное имеет смысл.
Дело в том, что я хочу сбросить stateThatCausesUseEffectToBeInvoked
в false
БЕЗ принудительного повторного рендеринга. (В настоящее время я заканчиваю тем, что вызываю службу дважды - сначала для win stateThatCausesUseEffectToBeInvoked
устанавливается значение true
, а затем снова, когда она сбрасывается на false
в контексте ловушки useEffect
. Эта переменная существует исключительно для цель вызвать useEffect
и избавить меня от необходимости делать в другом месте тот же запрос на обслуживание, который я делаю в useEffect
.
Кто-нибудь знает, как это может быть выполнено?