Dieser Meteor-Code zeigt die Daten aus der Mongo-Sammlung CarsCol
im Browser nicht an.
Was mache ich falsch?Meteor Export-Sammlung zu React-Komponente
// /imports/api/collections.js
export const CarsCol = new Mongo.Collection('carsCol');
// /imports/ui/myList.jsx
import React from 'react';
export const ListItems = ({listItems}) => { //<---- {listItems} undefined
if (listItems && listItems.length > 0) {
return (
<ol>
{listItems.map((item) => (
<li key={item._id}>{item.car}</li>
))}
</ol>
);
} else {
return (
<p>No cars yet!</p> //<------------ shows in browser
);
}
};
// /client/cars.js
import React from 'react';
import ReactDOM from 'react-dom';
import { composeWithTracker } from 'react-komposer';
import { ListItems } from '../imports/ui/myList.jsx';
import { CarsCol } from '../imports/api/collections.js';
const composer = (props, onData) => {
const sub = Meteor.subscribe('carsCol');
if (sub.ready()) {
const cars = CarsCol.find().fetch();
onData(null, {cars});
}
};
const Container = composeWithTracker(composer) (ListItems);
ReactDOM.render(<Container />, document.getElementById('react-root'));
Ich habe alle Datensätze aus der Sammlung entfernt, aber der Browser wurde nicht aktualisiert und zeigt nichts an. Warum funktioniert die Reaktivität in diesem Fall nicht? –
Das ist eine gute Frage, ich habe noch nie gesehen, dass es nicht so funktioniert, wie Sie es beschreiben. Ich denke, mit [Tracker-Komponente] (https://github.com/studiointeract/tracker-component) würde das Problem lösen, obwohl es erhebliche Änderungen im Code erfordern würde. –
Ich habe gelernt, dass die Reactive Compose Reaktivität innerhalb des Containers getan wird, also innerhalb der Funktion 'compose', wie kann sie auf Änderungen an der Mongo Collection reagieren, wird das Collection Fetching in die ui Komponente verschoben, wie in der angenommenen Antwort vorgeschlagen ? [https://voice.kadira.io/using-meteor-data-and-react-with-meteor-1-3-13cb0935dedb#.bz29237uj] –