#reactjs #react-native
#reactjs #react-native
Вопрос:
Я реализовал выборку внутри функции useEffect и получил следующую ошибку: эффект не должен возвращать ничего, кроме функции, которая используется для очистки
Вот фрагмент кода для того же:
const Tab1 = () => {
const [arr, updateArr] = useState([]);
const [loading, setLoading] = useState(true);
const myFunc = txt => {
console.log("Hello");
console.log(txt);
}
useEffect(() => {
return fetch('http://testapi')
.then((response) => response.json())
.then((json) => updateArr(json))
.catch((error) => console.error(error))
.finally(() => setLoading(false));
}, []);
return (
<View style={styles.container}>
<FlatList
data={arr.categories}
renderItem={itemData => (
<TouchableOpacity
onPress={() => this.myFunc(itemData.item.cno)}
>
<View>
<Text>{itemData.item.cno}</Text>
<Text>{itemData.item.name}</Text>
</View>
</TouchableOpacity>
)}
keyExtractor={(item, index) => item.cno}
/>
</View>
)
}`
Комментарии:
1. Сообщение об ошибке правильное. Вы не должны возвращать
fetch
вызов, а просто вызывать его. Итак:useEffect(() => { fetch(...)... }, []);
2. В вашем коде функция
useEffect
возвращает aPromise
… Простоremove
оператор return и предупреждение исчезнут. Если функцияuseEffect
возвращает что-то, это должна быть функция очистки, а неPromise
3. Пожалуйста, не используйте изображения для трассировки стека, всегда вставляйте их сюда как текст, если это возможно.
Ответ №1:
Удаление return
внутри useEffect
заставит его работать.
useEffect(() => {
fetch('http://testapi')
.then((response) => response.json())
.then((json) => updateArr(json))
.catch((error) => console.error(error))
.finally(() => setLoading(false));
}, []);
Ответ №2:
точное возвращение должно быть удалено
const Tab1 = () => {
const [arr, updateArr] = useState([]);
const [loading, setLoading] = useState(true);
const myFunc = txt => {
console.log("Hello");
console.log(txt);
}
useEffect(() => {
fetch('http://testapi')
.then((response) => response.json())
.then((json) => updateArr(json))
.catch((error) => console.error(error))
.finally(() => setLoading(false));
}, []);
return (
<View style={styles.container}>
<FlatList
data={arr.categories}
renderItem={itemData => (
<TouchableOpacity
onPress={() => this.myFunc(itemData.item.cno)}
>
<View>
<Text>{itemData.item.cno}</Text>
<Text>{itemData.item.name}</Text>
</View>
</TouchableOpacity>
)}
keyExtractor={(item, index) => item.cno}
/>
</View>
)
}`
Комментарии:
1. это только расширенная версия принятого ответа и не предоставляет никакой новой информации. Пожалуйста, всегда проверяйте, не существует ли ответа, который вы пытаетесь опубликовать.