【发布时间】:2020-08-16 19:08:03
【问题描述】:
我想在从“useEffect”中的函数获取数据后渲染我的功能组件“Home”,但是当我从我的 const 中的函数设置数据时,我的 Home 组件将再次渲染。
如果我删除“set”语句,它只会渲染一次。
当 HomeSrceen 第二次渲染时,它将启动一个位于子组件中的导航语句。
谁能解释一下为什么会发生这种情况以及我如何解决这个问题?
我的代码: HomeScreen.js
export function HomeScreen( navigation ) {
const [item, setItem] = React.useState([]);
console.log('fire home')
React.useEffect(() => {
getbannerdata()
.then(res => setItem(res))
}, []);
return (
<SafeAreaProvider>
<SafeAreaView style={style.container}>
<View>
<Banner data={item} navigation={navigation}/>
<Text>Home</Text>
</View>
</SafeAreaView>
</SafeAreaProvider>
);
}
banneritem.js(将触发导航语句)
const BannerItem = ({ item, navigation }) => {
return (
<View style={styles.cardView} onTouchStart={navigation.navigation.navigate('Setting')}>
<Image style={styles.image} source={{uri: item.header}} />
<TouchableOpacity>
<View style={styles.textView}>
<Text style={styles.itemTitle}>{item.title}</Text>
<Text numberOfLines={2} style={styles.itemDescription}>{item.content}</Text>
</View>
</TouchableOpacity>
</View>
)
}
bannerdata.js
function getbannerdata(){
console.log('fire bannerdata')
return fetch ('http://192.168.178.46:8000/intranet/messages/', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
})
.then((res) => res.json())
.then((resData) => {
return resData;
})
.catch(error => console.log(error))
};
export { getbannerdata }
输出终端
Finished building JavaScript bundle in 634ms.
Running application on Léons iPhone.
fire home
fire bannerdata
fire home
【问题讨论】:
标签: javascript reactjs react-native render