我想弄清楚如何在數據準備好時填充/渲染組件?基本上,我有一個腳本,查詢我的服務器返回數據,然後我解析它,並使其與我需要的屬性集合。然後在另一個文件中,我有反應組件查找該對象,但它們同時運行,因此組件查找時該對象不存在。如何在數據準備好時渲染組件?
我不確定如何繼續。
這是我的組件:
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嗎?這是跟蹤狀態和使用數據的最簡單方法 – erichardson30
我還沒有真正的,我今天才開始看React,所以我還沒有太熟悉。 – Batman
準備好數據後,只需使用'setState'。應該那麼簡單。不要進入Redux。初學者並不需要它。 React總是提到,渲染應該是'props'(external)+'state'(internal)的函數。 – activatedgeek