ОБНОВЛЕНИЕ: Да для варианта использования 1, если я извлекаю search.value за пределами useEffect и использую его как зависимость, это работает.
Но у меня есть обновленный вариант использования ниже
Вариант использования 2 : Я хочу передать объект searchHits на сервер. Сервер, в свою очередь, возвращает его мне с обновленным значением в ответ. Если я пытаюсь использовать объект searchHits, я все равно получаю бесконечный цикл
state: {
visible: true,
loading: false,
search: {
value: “”,
searchHits: {....},
highlight: false,
}
}
let val = search.value
let hits = search.searchHits
useEffect( () => {
axios.post(`/search=${state.search.value}`, {hits: hits}).then( resp => {
…do something or ..do nothing
state.setState( prevState => {
return {
…prevState,
search: {... prevState.search, hits: resp.hit}
}
})
})
}, [val, hits])
Вариант использования 1 : я хочу найти строку, а затем выделить при получении результатов
Например,
state: {
visible: true,
loading: false,
search: {
value: “”,
highlight: false,
}
}
useEffect( () => {
axios.get(`/search=${state.search.value}`).then( resp => {
…do something or ..do nothing
state.setState( prevState => {
return {
…prevState,
search: {... prevState.search, highlight: true}
}
})
})
}, [state.search])
В использовании. Эффект Я выполняю вызов API, используя search.value
. eslint жалуется, что есть зависимость от state.search
, он не распознает state.search.value
. Даже если вы передаете state.search.value
, он жалуется на state.search
Теперь, если вы передадите state.search
в качестве зависимости, он пойдет в бесконечном цикле, потому что после вызова API мы обновляем флаг highlights
внутри поиска.
, который вызовет другое обновление состояния и рекурсивный цикл.
Один из способов избежать этого - не размещать вложенные объекты в состоянии или перемещать флаг подсветки за пределы поиска, но я пытаюсь этого не делатьидти по этому пути, чтобы дать мне полную зависимостьЯ бы предпочел, чтобы Объект находился в состоянии, называемом поиском. Есть ли способ лучше подойти к этому. Если я хочу сохранить свой объект состояния, как указано выше, как мне обрабатывать бесконечный цикл