【发布时间】:2016-07-23 03:03:50
【问题描述】:
我想弄清楚当数据准备好后如何填充/渲染组件?本质上,我有一个脚本来查询我的服务器,该服务器返回数据,然后我解析它并将其放入具有我需要的属性的集合中。然后在另一个文件中,我有正在寻找该对象的反应组件,但它们同时运行,因此当组件正在寻找它时该对象不存在。
我不确定如何继续。
这是我的组件:
let SliderTabs = React.createClass({
getInitialState: function() {
return { items: [] }
},
render: function() {
let listItems = this.props.items.map(function(item) {
return (
<li key={item.title}>
<a href="#panel1">{item.title}</a>
</li>
);
});
return (
<div className="something">
<h3>Some content</h3>
<ul>
{listItems}
</ul>
</div>
);
}
});
ReactDOM.render(<SliderTabs items={home.data.slider} />,
document.getElementById('slider-tabs'));
我如何获取数据:
var home = home || {};
home = {
data: {
slider: [],
nav: []
},
get: function() {
var getListPromises = [];
$.each(home.lists, function(index, list) {
getListPromises[index] = $().SPServices.SPGetListItemsJson({
listName: home.lists[index].name,
CAMLViewFields: home.lists[index].view,
mappingOverrides: home.lists[index].mapping
})
getListPromises[index].list = home.lists[index].name;
})
$.when.apply($, getListPromises).done(function() {
home.notice('Retrieved items')
home.process(getListPromises);
})
},
process: function(promiseArr) {
var dfd = jQuery.Deferred();
$.map(promiseArr, function(promise) {
promise.then(function() {
var data = this.data;
var list = promise.list;
// IF navigation ELSE slider
if (list != home.lists[0].name) {
$.map(data, function(item) {
home.data.nav.push({
title: item.title,
section: item.section,
tab: item.tab,
url: item.url.split(",")[0],
path: item.path.split("#")[1].split("_")[0]
})
})
} else {
$.map(data, function(item) {
home.data.slider.push({
title: item.title,
url: item.url.split(",")[0],
path: item.path.split("#")[1]
})
})
}
})
})
console.log(JSON.stringify(home.data))
dfd.resolve();
return dfd.promise();
}
}
$(function() {
home.get()
})
【问题讨论】:
-
你有研究过 Redux 吗?这是跟踪状态和处理数据的最简单方法
-
我还没有,我今天才开始研究 React,所以我还不太熟悉。
-
准备好数据后,只需使用
setState。应该就这么简单。不要进入 Redux。初学者真的不需要。正如 React 经常提到的,render 应该是props(外部)+state(内部)的函数。 -
我会有一个父组件,它使用将数据设置为状态变量,然后将其作为道具传递给子组件
-
@activatedgeek 我很难看到
this.setState如何与我的组件一起工作。是全局变量吗?home.get()是否应该在完成后更改状态?
标签: javascript reactjs promise