ReactJS调用API的正确方法
我是个新手。有人能告诉我哪种是进行AJAX调用的正确方法吗? 目前我正在使用ReactJS调用API的正确方法,reactjs,Reactjs,我是个新手。有人能告诉我哪种是进行AJAX调用的正确方法吗? 目前我正在使用 this.serverRequest = $.get(this.props.source, function (result) { console.log("after serverRequest"); }.bind(this)); 但我在教程中看到了许多示例 componentDidMount: function() { $.ajax({ url:
this.serverRequest = $.get(this.props.source, function (result) {
console.log("after serverRequest");
}.bind(this));
但我在教程中看到了许多示例
componentDidMount: function() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
请告诉我哪种方法是正确的,为什么?如果您的组件自己管理AJAX请求,那么
componentDidMount
是正确的生命周期方法componentDidMount
被调用一次,并且在组件的生命周期中,当它被插入DOM时,只调用一次。不过,您可以将逻辑分解为单独的方法:
componentDidMount() {
this._serverRequest();
}
_serverRequest() {
/* your AJAX code here */
}
我在方法名称前面放了一个\uu
,以表示其私有可见性。虽然JS中没有方法可见性支持,但是\uuuz
是一种将方法标记为不应从外部调用的方法的约定。对于React
组件,应该向消费者公开的唯一公共API是一组道具
需要记住的一件重要事情是:如果您的组件被卸载,例如在Ajax请求返回之前从DOM中删除,您将得到一个错误,因为您将尝试对不再存在的组件执行setState()
。虽然有一些安全检查可以防止这种情况发生,但通常不推荐这种模式。您应该尝试在更高级别的组件上管理所有AJAX请求,这在应用程序生命周期中是不应该删除的。如果您坚持使用较低级别的支持Ajax的组件(例如,带有服务器端搜索的智能typeahead),那么最好在不需要它们时使用style={{display:'none'}}
隐藏它们,而不是将它们从DOM中删除。这不仅避免了此类与Ajax相关的错误,而且还避免了任何不必要的重复Ajax请求(因为每次将组件新插入DOM时都会调用componentDidMount
)
但是,在实际应用程序中,通常最好将所有业务逻辑和所有服务器端通信都保留在组件之外。使用React
纯粹用于呈现,并使用框架或设计模式,如redux
或flux
来管理应用程序状态。如果您的组件自己管理AJAX请求,那么componentDidMount
是正确的生命周期方法componentDidMount
被调用一次,并且在组件的生命周期中,当它被插入DOM时,只调用一次。不过,您可以将逻辑分解为单独的方法:
componentDidMount() {
this._serverRequest();
}
_serverRequest() {
/* your AJAX code here */
}
我在方法名称前面放了一个\uu
,以表示其私有可见性。虽然JS中没有方法可见性支持,但是\uuuz
是一种将方法标记为不应从外部调用的方法的约定。对于React
组件,应该向消费者公开的唯一公共API是一组道具
需要记住的一件重要事情是:如果您的组件被卸载,例如在Ajax请求返回之前从DOM中删除,您将得到一个错误,因为您将尝试对不再存在的组件执行setState()
。虽然有一些安全检查可以防止这种情况发生,但通常不推荐这种模式。您应该尝试在更高级别的组件上管理所有AJAX请求,这在应用程序生命周期中是不应该删除的。如果您坚持使用较低级别的支持Ajax的组件(例如,带有服务器端搜索的智能typeahead),那么最好在不需要它们时使用style={{display:'none'}}
隐藏它们,而不是将它们从DOM中删除。这不仅避免了此类与Ajax相关的错误,而且还避免了任何不必要的重复Ajax请求(因为每次将组件新插入DOM时都会调用componentDidMount
)
但是,在实际应用程序中,通常最好将所有业务逻辑和所有服务器端通信都保留在组件之外。使用React
纯粹用于渲染,并使用类似redux
或flux
的框架或设计模式来管理应用程序状态。我很困惑,为什么我们要使用jquery来进行ajax调用?如果react本身提供serverRequest方法来调用ajax@ShinoyBabu:React默认情况下不会在React.Component
上提供serverRequest
方法。您不需要使用jquery—您可以使用纯JS,您可以使用polyfill进行获取
,您可以使用任何您选择的—但是您确实需要自己编写Ajax加载逻辑。我很困惑,为什么我们要使用jquery进行Ajax调用?如果react本身提供serverRequest方法来调用ajax@ShinoyBabu:React默认情况下不会在React.Component
上提供serverRequest
方法。您不需要使用jquery—您可以使用纯JS,您可以使用polyfill进行fetch
,您可以选择任何方式—但您确实需要自己编写Ajax加载逻辑。