2016-09-01 3 views
0

Rendering Ich bin Rendering folgende reagieren mit ...bedingte Anweisung nicht richtig

class App extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      register: false 
     } 
    } 
handleClick(event) 
{ 
     this.setState({register: true}); 
} 

    render(){ 

     //console.log(this.props.exists); 

     if (this.state.register || this.props.exists == true) { 
      return (
      <Register /> 
      ); 
     } 
     else { 
      return (
      <Index event={this.handleClick.bind(this)} /> 
      ); 
     } 
    } 
} 

module.exports = App; 

Also ich node.js bin mit der Seite zu machen. Wenn ich als so machen ...

var reactHtml = reactDom.renderToString(App({exists: false})); 
res.render('../../tutorHub/views/index.jade', {reactOutput: reactHtml}); 

<Index /> wird wiedergegeben, wie erwartet und console.log(this.props.exists) druckt false, auch wie erwartet.

tritt jedoch das Problem, wenn ich die Seite als so machen ...

var reactHtml = reactDom.renderToString(App({exists: true})); 
res.render('../../tutorHub/views/index.jade', {reactOutput: reactHtml}); 

console.log(this.props.exists) druckt true, was richtig ist. Die <Index /> Seite wird jedoch im Gegensatz zur <Register /> Seite gerendert.

Ich vermute, es hat etwas mit

(this.state.register || this.props.exists == true) 

Aus irgendeinem Grund zu tun this.state.register richtig gelesen wird, aber this.props.exists nie erreicht wird.

Kann mir jemand zeigen, warum das so ist?

+0

Zustand nicht direkt einstellen Sie verwenden sollten. Verwenden Sie stattdessen ['getInitialState'] (https://facebook.github.io/react/docs/component-specs.html#getinitialstate). – Blorgbeard

+0

'this.props.exists === undefined' deshalb wird der erste korrekt übergeben und der zweite schlägt fehl –

+0

@IslamIbakaev das ist was komisch, es ist nicht undefiniert, siehe die console.log im obigen Code, es gibt true aus – Bolboa

Antwort

0

ich glaube, Sie reactDom.renderToString(<App exists={true} />) nicht reactDom.renderToString(App({exists: true}));

+0

Das behebt das Problem nicht – Bolboa

+0

Ich sehe Sie serverseitigen Rendering mit reagieren, nur sicherstellen, dass Ihr Browser-Code die Komponente nicht neu laden. – chenkehxx