#javascript #reactjs #react-native
Вопрос:
const [searchText, setSearchText] = useState('')
const searchHandler = async (searchTextInput) => {
console.log('search is:::', searchTextInput)
setSearchText(() => searchTextInput)
}
const searchOnSubmitHandler = async () => {
await loadShopsCount()
await loadShops()
}
const searchClearHandler = async () => {
setSearchText(() => "")
console.log('onClear-----------search is:::', searchText)
await loadShopsCount()
}
При вызове searchClearHandler
после поиска чего- searchText
либо возвращает предыдущее значение состояния вместо пустой строки. Следовательно, мой компонент не может выполнить повторную визуализацию.
Как я могу установить searchText
пустую строку и повторно отобразить компонент при вызове searchClearHandler
?
Комментарии:
1. Что бы ни вызывало
searchClearHandler
, оно ожидает завершения до запуска следующего рендеринга. ВызовsetVar
изuseState
вызова фактически не изменит значениеvar
в текущем цикле рендеринга, он изменит следующее значениеvar
.2. Примечание:
searchHandler
не обязательно должно быть асинхронным, и вашим методам setState не нужно использовать обратный вызов:setSearchText(searchTextInput)
иsetSearchText('')
.
Ответ №1:
Используйте эффект использования.
useEffect(() => {
Here your function which you want to call.
}, [searchText]);
Комментарии:
1. У меня есть компонент панели поиска с реквизитами onChangeText. Если я установлю searchText в качестве зависимости в useEffect, он будет продолжать перенаправлять компонент на каждый ввод символов, что противоречит цели onSubmitEditing (чего я хочу).
2. Что собирается использовать useCallback ??