2015-05-24 149 views
1

我做了關於http://reactjs.net/getting-started/tutorial.html的評論教程,並讓它使用.net mvc渲染服務器端。渲染React JS服務器端使用.net

我有一個現有的mvc應用程序,我在其中重寫了一個頁面。我試圖使用.net渲染它的服務器端,但是當它嘗試渲染服務器端時出現錯誤。

Exception Details: React.Exceptions.ReactServerRenderingException: Error while rendering "TopicAnswers" to "react1": TypeError: undefined is not a function 
    at React.createClass.render (Script Document [8]:80:39) ->  var answerNodes = this.props.data.map(function(answer){ 
    at ReactCompositeComponentMixin._renderValidatedComponentWithoutOwnerOrContext (Script Document [2]:7395:34) 

下面的代碼:

在我的MVC觀點:

@Html.React("TopicAnswers", new 
{ 
    initialAnswers = Model, 
    url = Url.Action("TopicAnswers", new { id = ViewBag.TopicID }), 
}) 

我TopicAnswers.jsx文件:

var TopicAnswers = React.createClass({ 
    getInitialState: function(){ 
    alert('inside getInitialState: ' + this.props.initialAnswers);  
    return {answers: this.props.initialAnswers}; 
} 

我ReactConfig.cs文件:

ReactSiteConfiguration.Configuration 
       .AddScript("~/Scripts/internal/eusVote/TopicAnswers.jsx"); 

問題:爲什麼渲染響應文件服務器端時出現問題?

回答

2

我得到這個錯誤消息試圖渲染使用.NET陣營JSX文件服務器端:

「React.Exceptions.ReactServerRenderingException:錯誤而渲染‘TopicAnswers’到‘react1’:類型錯誤:未定義是不是函數「

我的問題是,在JSX文件中,我仍然有ComponentWillMount,它調用loadAnswersFromServer。如果你在渲染客戶端,這就是你需要的。但是一旦你調整你的代碼來呈現服務器端,你需要註釋掉/刪除ComponentWillMount,以便它不會嘗試在服務器端運行loadAnswersFromServer函數。

使用MVC,應將數據從控制器傳遞到視圖,並在初始加載的@ Html.Render(「Comment」,new {initialData = Model})中引用。

另外,不要忘記從JSX文件註釋/刪除React.render(...)行。

0

alert僅在瀏覽器窗口上下文中可用。在服務器上渲染時,您無法調用與瀏覽器相關的任何功能。如果你打電話給他們,那麼你需要對他們進行填充,以便他們不會在服務器上失敗。

+0

感謝Tomas。我編輯了我的OP,以顯示我在嘗試投入警報之前收到的錯誤消息。看起來我的反應文件「TopicAnswers.jsx」沒有在我的MVC視圖中通過@ Html.React讀取。 – nanonerd

相關問題