2016-08-08 53 views
2

Anwendung A-Rendering werden Daten an Anwendung B posten, die den Anfangszustand für Application B. Um dies zu tun sein wird, ich Verwendung von Reactjs.NetAusgangszustand von der Komponente mit Server-Seite zu speichern

Anwendung B erhalten mache Anfangsdaten als Post-Daten von Anwendung A. Ich muss diese Post-Daten als initialState in meinem Geschäft festlegen. Um dies zu tun, benutze ich Reactjs.net.

Ich habe die Post-Daten im Controller gelesen, die Daten meinem Objekt zugeordnet und es viewbag zugewiesen, um es in meiner Ansicht verfügbar zu machen.

Unten ist, wie meine Ansicht aussieht. Ich lese die InitialData von ViewBag und weise sie zu, damit auf sie in meiner React-Komponente zugegriffen werden kann.

@Styles.Render("~/css") 
@Scripts.Render("~/scripts") 

@Html.React("InitialData", new { LoadData = ViewBag.InitialDataObject }) 

<script src="/react-15.0.1.js"></script> 
<script src="/react-dom-15.0.1.js"></script> 

<div class="container pad-l-0px pad-r-0px"> 
    <div id="app"></div> 
</div> 

<script src="~/public/bundle.js"></script> 

In der Komponente React kann ich die Daten erhalten. Wie gebe ich diese Daten als initialState an den Store weiter und was ist der beste Weg?

var InitialData = React.createClass({ 
    getInitialState: function() { 
     return { InitialLoadData: this.props.LoadData }; 
    }, 
    render: function() { 
     return (
      <div></div> 
    ); 
    } 
}); 

Ich werde Server-Side-Rendering nur verwenden, um den Ausgangszustand festzulegen. Ich weiß, dass ich die Daten einer globalen Variable in meiner Ansicht zuweisen kann und auf diese Variable in meinem Reduzierer direkt zugreife. Aber ich möchte das vermeiden.

+0

Sie nicht ein AJAX-Aufruf für Ihren Ausgangszustand machen sollte. Der Anfangszustand sollte entweder die von der App benötigte Information ohne Benutzereingaben sein oder die Barebones-Datenstruktur, die für die Wiedergabe der Ansicht benötigt wird. Machen Sie Ihren Netzwerkaufruf in 'componentDidMount' und aktualisieren Sie den Status mit' this.setState() ', nachdem der Aufruf abgeschlossen wurde. –

+0

Ich mache keinen AJAX-Anruf. Anfangszustand kommt als Post, also benutze ich serverseitiges Rendering, um die Postdaten zum redux Speicher weiterzugeben. – San

Antwort

1

Wenn Sie Redux verwenden, liefern Sie keine Ausgangsspeicherdaten von einer Komponente, aber Sie liefern es als Parameter für createStore.

Normalerweise würden Sie Ihren Anfangszustand einer Skriptvariablen in der serverseitigen Ausgabe zuweisen und diese Variable bei der Initialisierung Ihres Geschäfts verwenden.

Siehe diese Seite für ein ausführliches Beispiel: http://redux.js.org/docs/recipes/ServerRendering.html

+0

Ich versuche, http://reactjs.net/guides/server-side-rendering.html zu folgen. Ich habe die Daten in der Komponente, die ich als Parameter an createstore übergeben will. – San