Performance 我应该发出哪个生命周期钩子请求并立即设置状态?
当我的组件挂载时,我需要从API请求它的内容。在: componentDidMount()在创建组件后立即调用 安装。需要DOM节点的初始化应该在这里进行。如果你 需要从远程端点加载数据,这是一个好地方 实例化网络请求 其内容如下: 在此方法中调用setState()将触发额外的呈现(…) 请谨慎使用此图案 因为它经常导致性能问题Performance 我应该发出哪个生命周期钩子请求并立即设置状态?,performance,reactjs,react-lifecycle,Performance,Reactjs,React Lifecycle,当我的组件挂载时,我需要从API请求它的内容。在: componentDidMount()在创建组件后立即调用 安装。需要DOM节点的初始化应该在这里进行。如果你 需要从远程端点加载数据,这是一个好地方 实例化网络请求 其内容如下: 在此方法中调用setState()将触发额外的呈现(…) 请谨慎使用此图案 因为它经常导致性能问题 向API发出请求并立即使用响应设置状态的最佳做法是什么?每当触发setState时,组件都将被重新呈现(无论生命周期事件如何) 请谨慎使用此模式 例如,如果您在组件中
向API发出请求并立即使用响应设置状态的最佳做法是什么?每当触发
setState
时,组件都将被重新呈现(无论生命周期事件如何)
请谨慎使用此模式
例如,如果您在组件中触发setState
将接收道具
,并且您没有正确处理未来的道具,那么您可能会进入一个无休止的循环
我的建议是坚持使用componentDidMount
,并在满足api请求后立即设置状态:
componentDidMount() {
fetch('api-endpoint')
.then(response => response.json())
.then(result => this.setState({ stateProp: result }))
}
在收到响应后调用API并更新状态的最佳方法是使用
componentDidMount()
或componentWillMount()
哪一个可能取决于您希望如何处理来自API调用的数据。如果需要访问组件DOM,则必须使用componentDidMount()
。也就是说,除非您的数据不需要设置为状态
,否则这两个选项都不会使您免于进行额外的重新渲染,在这种情况下,您可以将其保存到此
《公约》甚至在以下文件中指出了这一点:
componentDidMount()
在安装组件后立即调用。需要DOM节点的初始化应该在这里进行如果需要从远程端点加载数据,这是实例化网络请求的好地方。
在呈现以调用api之前:
componentWillMount(){
fetch(api)
.then((response)=>{
this.setState({data:response.data});
})
componentDidMount(){
fetch(api)
.then((response)=>{
this.setState({data:response.data});
})}
}
渲染后调用api:
componentWillMount(){
fetch(api)
.then((response)=>{
this.setState({data:response.data});
})
componentDidMount(){
fetch(api)
.then((response)=>{
this.setState({data:response.data});
})}
在渲染以调用道具数据之前:
componentWillReceiveProps(){
this.setState({data:this.props.data});
}在
componentDidMount()
中调用api,并在componentWillReceiveProps()中收到响应时更新状态。
我没有收到响应。我在哪里存储API的响应?发出请求的组件与接收响应的组件是相同的,因此,如果我没有错的话,这个钩子永远不会被调用,因为我的组件永远不会收到prop。如果你能告诉我你正在进行什么类型的API调用,我可以扩展我的答案,并给你一个更精确的解决方案。您正在获取数据吗?如果是这样,您将在React应用程序中使用什么样的数据?ComponentWillMount很快就会被弃用,它现在是不安全的。因此,请使用componentDidMount