Ich versuche herauszufinden, wie eine Komponente gefüllt/gerendert wird, wenn die Daten bereit sind? Im Wesentlichen habe ich ein Skript, das meinen Server abfragt, der Daten zurückgibt, dann parse ich es und mache es zu einer Sammlung mit den Eigenschaften, die ich brauche. Dann habe ich in einer anderen Datei die Reaktionskomponente, die nach dem Objekt sucht, aber sie läuft zur selben Zeit, so dass das Objekt nicht existiert, wenn die Komponente danach sucht.Wie rende ich eine Komponente, wenn die Daten bereit sind?
Ich bin mir nicht sicher, wie es weitergeht.
Dies ist meine Komponente:
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'));
Wie ich meine Daten zu erhalten:
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()
})
Haben Sie Redux überhaupt untersucht? Das ist der einfachste Weg, um den Überblick zu behalten und mit Daten zu arbeiten. – erichardson30
Ich habe nicht wirklich, ich habe gerade angefangen, React heute anzusehen, also bin ich noch nicht allzu vertraut mit allem. – Batman
Nachdem Sie mit den Daten fertig sind, verwenden Sie 'setState'. Sollte so einfach sein. Nicht in Redux tun. Es ist nicht wirklich notwendig für Anfänger. Und wie React immer erwähnt, sollte das Rendering eine Funktion von "Requisiten" (extern) + "Zustand" (intern) sein. – activatedgeek