2015-07-03 57 views
3

我目前正試圖在我的node.js + express構建中實現一個同構反應組件。然而,當我嘗試上述組件包括了我的玉模板來渲染它,我得到這個錯誤:類型錯誤:無法添加屬性方面,對象是不可擴展Node.js反應:無法添加屬性上下文,對象不可擴展

這裏是我的路線文件:

var express = require('express'); 
var router = express.Router(); 


var React = require('react/addons'), 
    ReactApp = React.createFactory(require('../../react/components/ReactApp')); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    var reactAppEl = ReactApp(); 
    console.log(reactAppEl); 
    var reactHtml = React.renderToString(reactAppEl); 
    res.render('index', { reactOutput: reactHtml }); 
}); 

module.exports = router; 

組件:

/** @jsx React.DOM */ 

var React = require('react/addons'); 

/* create factory with griddle component */ 
var Griddle = React.createFactory(require('griddle-react')); 

var fakeData = require('../data/fakeData.js').fakeData; 
var columnMeta = require('../data/columnMeta.js').columnMeta; 
var resultsPerPage = 200; 

var ReactApp = React.createClass({ 

    componentDidMount: function() { 
    console.log(fakeData); 

    }, 
    render: function() { 
    return (
     <div id="table-area"> 

     <Griddle results={fakeData} 
       columnMetadata={columnMeta} 
       resultsPerPage={resultsPerPage} 
       tableClassName="table"/> 

     </div> 
    ) 
    } 
}); 

/* Module.exports instead of normal dom mounting */ 
module.exports = ReactApp; 

而且我一飲而盡任務拋出一個警告說警告:組件(...):在返回的部件上找不到render方法立場:你可能已經忘記在你的組件中定義render,或者你可能意外地嘗試渲染一個元素,該元素的類型是一個不是React組件的函數。 警告:請勿設置React元素的道具屬性。相反,在最初創建元素時指定正確的值。

任何人都可以幫我嗎?非常感謝

回答

5

通過添加圍繞griddle-react一個react.createFactory()電話,表示您要使用普通的JavaScript,而不是JSX。因此,你需要使用的幹鍋JavaScript函數在隨後的渲染功能:

return Griddle({results: fakeData, 
       columnMetadata: columnMeta, 
       resultsPerPage: resultsPerPage, 
       tableClassName: "table"}); 

如果你想使用你已經擁有的JSX語法,只要求griddle-react沒有React.createFactory()電話。