Поиск…
замечания
React - это библиотека JavaScript для создания пользовательских интерфейсов. Это с открытым исходным кодом , разработанный и поддерживаемый Facebook. «Метеор» имеет готовую поддержку React.
Ресурсы:
Setup и "Hello World"
Добавить Реагировать на ваш проект:
meteor npm install --save react react-dom react-mounter
Создайте файл client/helloworld.jsx
чтобы отобразить простой компонент React:
import React, { Component } from 'react';
import { mount } from 'react-mounter';
// This component only renders a paragraph containing "Hello World!"
class HelloWorld extends Component {
render() {
return <p>Hello World!</p>;
}
}
// When the client application starts, display the component by mounting it to the DOM.
Meteor.startup(() => {
mount(HelloWorld);
});
Создайте реактивный контейнер, используя createContainer
Предположим, что есть коллекция под названием Todos
и autopublish
пакет autopublish
. Вот основной компонент.
import { createContainer } from 'meteor/react-meteor-data';
import React, { Component, PropTypes } from 'react';
import Todos from '/imports/collections/Todos';
export class List extends Component {
render() {
const { data } = this.props;
return (
<ul className="list">
{data.map(entry => <li {...entry} />)}
</ul>
)
}
}
List.propTypes = {
data: PropTypes.array.isRequired
};
Внизу вы можете добавить контейнер для подачи реактивных данных в компонент. Это будет выглядеть так.
export default createContainer(() => {
return {
data: Todos.find().fetch()
};
}, List);
Отображение коллекции MongoDB
В этом примере показано, как коллекция MongoDB может отображаться в компоненте React. Коллекция постоянно синхронизируется между сервером и клиентом, и страница мгновенно обновляется по мере изменения содержимого базы данных.
Чтобы подключить компоненты React и коллекции Meteor, вам понадобится пакет react-meteor-data
.
$ meteor add react-meteor-data
$ meteor npm install react-addons-pure-render-mixin
Простая коллекция объявляется both/collections.js
. Каждый исходный файл в both
каталогах является как клиентским, так и серверным кодом:
import { Mongo } from 'meteor/mongo';
// This collection will contain a list of random numbers
export const Numbers = new Mongo.Collection("numbers");
Сбор должен быть опубликован на сервере. Создайте простую публикацию на server/publications.js
:
import { Meteor } from 'meteor/meteor';
import { Numbers } from '/both/collections.js';
// This publication synchronizes the entire 'numbers' collection with every subscriber
Meteor.publish("numbers/all", function() {
return Numbers.find();
});
Используя функцию createComponent
мы можем передать реактивные значения (например, коллекцию Numbers
) в компонент React. client/shownumbers.jsx
:
import React from 'react';
import { createContainer } from 'meteor/react-meteor-data';
import { Numbers } from '/both/collections.js';
// This stateless React component renders its 'numbers' props as a list
function _ShowNumbers({numbers}) {
return <div>List of numbers:
<ul>
// note, that every react element created in this mapping requires
// a unique key - we're using the _id auto-generated by mongodb here
{numbers.map(x => <li key={x._id}>{x.number}</li>)}
</ul>
</div>;
}
// Creates the 'ShowNumbers' React component. Subscribes to 'numbers/all' publication,
// and passes the contents of 'Numbers' as a React property.
export const ShowNumbers = createContainer(() => {
Meteor.subscribe('numbers/all');
return {
numbers: Numbers.find().fetch(),
};
}, _ShowNumbers);
Первоначально база данных, вероятно, пуста.
Добавьте записи в MongoDB и следите за обновлениями страницы автоматически.
$ meteor mongo
MongoDB shell version: 3.2.6
connecting to: 127.0.0.1:3001/meteor
meteor:PRIMARY> db.numbers.insert({number: 5});
WriteResult({ "nInserted" : 1 })
meteor:PRIMARY> db.numbers.insert({number: 42});
WriteResult({ "nInserted" : 1 })