2015-06-05 2 views
1

У моего простого веб-приложения есть две страницы. (Экспресс в качестве сервера)Реагирование на стороне сервера с помощью реактивного маршрутизатора

/дома

/пункт

  1. Чтобы проверить, если страница визуализации в клиенте и на сервере. Я печатаю текст на консоли. Я вижу текст «рендеринга» в консоли сервера и клиента, если я непосредственно набираю url localhost: 3000/item в браузере. Однако, если я получаю доступ к странице товаров через <Link to="item">Item</Link> на домашней странице. Я вижу «рендер» только на стороне клиента, но не на стороне сервера? Поэтому я думаю, что он не отображается на стороне сервера. Или я что-то не понимаю? может кто-нибудь мне сказать?

  2. Другой вопрос: я хотел бы использовать тот же код для создания приложения phonegap, работающего в android. Есть ли проблема, если я использую рендеринг на стороне сервера React? Или я должен использовать рендеринг на стороне клиента React, а затем вызвать restful для получения данных?

  3. еще один вопрос: , когда я использую этот код в сервер он дает мне "неожиданный маркер <" ошибка

React.renderToString (< Handler/>)

Так что я изменено на

React.renderToString(React.createElement(Handler)) 

Как настроить сервер так, чтобы он знал, как разбирать jsx код?

Спасибо всем

item.js

var React = require('react'), 
DOM = React.DOM, div = DOM.div, button = DOM.button, ul = DOM.ul, li = DOM.li  

// This is just a simple example of a component that can be rendered on both 
// the server and browser 

module.exports = React.createClass({ 
    getInitialState: function() { 
     console.log('getInitialState');  
     return { 
      count: 0//this.props.initialCount 
     }; 
    }, 

    _increment: function() { 
     console.log('_increment'); 
     this.setState({ count: this.state.count + 1 }); 
    }, 

    render: function() { 
     console.log('render'); 
     return div({onClick:this._increment}, this.state.count);     
    } 
}); 

server.js

app.use(function (req, res) { 
    Router.run(routes, req.path, function (Handler) {  
    res.send('<!DOCTYPE html>' + React.renderToString(React.createElement(Handler))); 
    }); 
}); 

browser.js

var React = require('react'); 
var Router = require('react-router'); 
var routes = require('./routes'); 

//var Info = require ('./pages/info.jsx'); 


/*React.render(
     <h1>Hello, world!</h1>, 
     document.getElementById('main') 
    );*/ 

Router.run(routes, Router.HistoryLocation, function (Handler) { 
    React.render(<Handler />, document); 
}); 
+0

вместо того, чтобы разобрать jsx каждый раз на стороне сервера, лучше разместить обработанный javascript на сервере. т.е. запустить jsx во время разработки и развернуть javascript напрямую. – arkoak

+0

Это может быть хороший ресурс относительно пункта 3: http://jlongster.com/Backend-Apps-with-Webpack--Part-I – Daniel

+0

Как насчет вопроса 1 и 2? кто-нибудь может мне помочь? – fingercross

ответ

0

Чтобы ответить на вопрос 1. Если щелчок по ссылка на веб-страницу it m что веб-сервер уже сбросил сгенерированный HTML на клиент. Это означает, что клиент реагирует на реакцию клиента, поэтому вы не увидите выхода на сервере. Однако, если вы посещаете URL-адрес, вы попадаете на сервер, следовательно, видите консольный журнал на сервере. Надеюсь, это имеет смысл.

+0

Да, я тоже так думаю, но я новичок в React. Так что я не уверен. Спасибо за ответ на мой вопрос. – fingercross

Смежные вопросы