在一个单独的文件中,在任何React组件中设置setState
setState in none React component in a seperate file
做一些xhr请求到后端,我希望我所有的请求都在一个单独的文件是WebAPIUtils.js
../utils/WebAPIUtils.js
var request = require('superagent');
var constants = require('../constants/constants');
var APIEndPoints = constants.APIEndPoints;
module.exports = {
loadPost: function() {
request.get(APIEndPoints.USER + '/' + 'ahmadajmi')
.set('Accept', 'application/json')
.end(function(error, res) {
if (res) {
var json = JSON.parse(res.text);
return json;
}
});
}
};
post.js
var React = require('react');
var WebAPIUtils = require('../utils/WebAPIUtils');
// other requires
var Post = React.createClass({
getInitialState: function() {
return {data: ''}
}
,
componentDidMount: function() {
// Want to setState like this
// this.setState({data: WebAPIUtils.loadPost()});
// instead of this
this.loadPost();
}
,
// this method is working fine here, but I want to use the one in `WebAPIUtils.js` file
loadPost: function() {
request.get(APIEndPoints.USER + '/' + 'ahmadajmi')
.set('Accept', 'application/json')
.end(function(error, res) {
if (res) {
var json = JSON.parse(res.text);
this.setState({data: json})
}
}.bind(this));
},
render: function() {
return (
<div className="post">
{this.state.data}
</div>
);
}
});
上面的代码工作得很好,但是我想把我所有的xhr请求移动到WebAPIUtils.js
文件。那么,连接它们并更新状态的正确方法是什么呢?
菲利克斯建议检查:我如何从异步调用返回响应?
做了一个回调函数,它工作
../utils/WebAPIUtils.js
var request = require('superagent');
var constants = require('../constants/constants');
var APIEndPoints = constants.APIEndPoints;
module.exports = {
// Add callback
loadPost: function(callback) {
request.get(APIEndPoints.USER + '/' + 'ahmadajmi')
.set('Accept', 'application/json')
.end(function(error, res) {
if (res) {
var json = JSON.parse(res.text);
callback(json);
}
});
}
};
post.js
var React = require('react');
var WebAPIUtils = require('../utils/WebAPIUtils');
var Post = React.createClass({
getInitialState: function() {
return {data: ''}
}
,
componentDidMount: function() {
// Execute loadPost and setState based on the returned data
WebAPIUtils.loadPost(function(result) {
this.setState({data: result})
}.bind(this));
}
,
render: function() {
return (
<div className="post">
{this.state.data}
</div>
);
}
});
相关文章:
- React重新渲染但未显示正确的组件
- 函数参数中的数据与指定变量之间的任何性能差异
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 是否有任何JavaScript UI组件可以显示字符串之间的差异
- 没有任何 DOM 元素的 Aura 组件
- Firefox附加组件:cfx-run运行良好,cfx-xpi运行良好,但附加组件没有任何作用
- 如何防止其他元素在拖动任何devexpress组件时高亮显示
- 秘银组件不返回任何内容
- 任何限制 Mozilla 附加组件 SDK 中页面模组目标的方法
- 任何想法为什么这个反应组件按钮在单击上不会触发
- 如何在应用程序的多个组件中维护一个 js 文件而不会出现任何错误
- 更改角度gantt组件的maxHeight没有任何效果
- 检查p:fileUpload组件是否包含任何要上传的文件,以更改背景
- 有Ember.js任何附加组件来路由请求
- 有没有任何方法可以使用Firefox中的js控制台来检查附加组件
- 是否有任何方法从存储读取而不是从组件在React-redux
- 在一个单独的文件中,在任何React组件中设置setState
- 如何绕过CORS在ajax调用的任何扩展/附加组件
- 如何在不擦除/覆盖任何旧绑定的情况下将Knockout.js组件附加到页面
- 为什么Foundation 5不初始化任何JavaScript组件?