Reactjs 为什么要渲染两次?

Reactjs 为什么要渲染两次?,reactjs,react-native,Reactjs,React Native,我想知道的 此React Native组件正在渲染两次。 我想知道为什么,如果这是坏代码 导出默认类项扩展React.Component{ 建造师(道具){ 超级(道具); 此.state={ 刷新:错, 项目:[], }; } fetchData=async()=>{ const querySnapshot=wait Fire.shared.getItemsByGenres(1); const items=wait Fire.shared.pushItems(querySnapshot); t

我想知道的

React Native
组件正在渲染两次。 我想知道为什么,如果这是坏代码

导出默认类项扩展React.Component{
建造师(道具){
超级(道具);
此.state={
刷新:错,
项目:[],
};
}
fetchData=async()=>{
const querySnapshot=wait Fire.shared.getItemsByGenres(1);
const items=wait Fire.shared.pushItems(querySnapshot);
this.setState({items});
}
componentDidMount(){
这是fetchData();
}
_onRefresh(){
this.setState({刷新:true});
this.fetchData()。然后(()=>{
this.setState({刷新:false});
});
}
render(){
控制台日志(“火灾”);
const{items}=this.state;
返回(
);
}
}
console.log()输出两次:(

有没有更好的方法使用RefreshControl


如果你们能给我一些建议,我将不胜感激。

事实上,这个组件处于一个合适的状态。获取数据的异步函数在一个单独的函数中。你在
组件中调用它。所以在第一次初始化时,它会在没有数据的情况下呈现。当异步函数获取数据时,会触发一个e> 设置state
函数以使用数据进行另一次渲染。因此,很明显,您会看到两次
控制台.log
,而且您肯定有两次渲染。

第一次渲染是在组件最初装载时进行的。然后在组件装载后,在
fetchData
中执行fetch in
componentDidMount
操作,您正在设置导致渲染的状态r再次发生。谢谢!现在我有点了解React Native中渲染的工作原理。我明白了。我担心这是否不好。非常感谢!亲爱的@Wes,不要担心,这是一种正确的方法,但是如果你想看到另一种方法,请阅读React JS文档。这是实验性的。