#react-native #rest #axios #use-effect
#реагирует на собственные #rest #axios #use-effect
Вопрос:
Я пытаюсь получить данные в своем приложении react native, используя useEffect
, но я получаю следующую ошибку:
Ошибка ReferenceError: не удается найти переменную: getListOfRecipe .
Я пытался найти, как использовать useEffect
, но я не смог ее решить.
Это мой компонент:
const RecipeCard = ({ }) => {
const [recipeList, setRecipeList] = useState([])
useEffect(() => {
function getListOfRecipe(){
axios({
method: 'get',
url: 'http://192.168.0.7:3333/report',
responseType: 'json',
headers: {},
data: {
name: "acem"
}
})
.then(function (res) {
setRecipeList(res)
})
.catch(function (error) {
console.log(error);
console.log("######## CARD CALL - ERROR!!! :: ", error);
})
.then(function () {
});
} []
})
console.log('getListOfRecipe: ', getListOfRecipe())
return (
<View>
<Text>
Recipe Card:
</Text>
</View>
)
}
export default RecipeCard
Может ли кто-нибудь помочь мне исправить это и выполнить вызов api fetch для получения данных API?
Комментарии:
1. Что делает дополнительный
then()
послеcatch()
do? Я думаю, вы также можете просто удалить ее, если хотите, чтобы данные, к которым вы обращаетесь, находились в состоянии, а не при запуске функции.
Ответ №1:
Когда вы запускаете функцию в a useEffect()
, вам нужно вызвать ее, просто определив ее внутри useEffect()
, она не будет запущена.
Во-вторых, когда вы хотите распечатать значения, которые вы храните в состоянии, вы получаете к ним доступ, используя 1-й элемент useState
, который вы определяете. Здесь вы устанавливаете данные, используя setRecipesList
then, чтобы получить к ним доступ, который вы используете recipeList
.
Но данные не устанавливаются сразу, когда вы извлекаете данные из API. Итак, вы проверяете, существуют ли данные, затем используете if
оператор, а затем вы console.log(recipeList)
.
const RecipeCard = ({ }) => {
const [recipeList, setRecipeList] = useState([])
useEffect(() => {
function getListOfRecipe(){
axios({
method: 'get',
url: 'http://192.168.0.7:3333/report',
responseType: 'json',
headers: {},
data: {
name: "acem"
}
})
.then(function (res) {
setRecipeList(res)
})
.catch(function (error) {
console.log(error);
console.log("######## CARD CALL - ERROR!!! :: ", error);
})
getListOfRecipe();
} []
})
if(recipeList){
console.log(recipeList)
}
return (
<View>
<Text>
Recipe Card:
</Text>
</View>
)
}
export default RecipeCard