【问题标题】:conditional statement not rendering properly条件语句未正确呈现
【发布时间】:2016-09-01 09:57:49
【问题描述】:

我正在使用 react 渲染以下内容...

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;

所以我使用 node.js 来呈现页面。当我这样渲染时......

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

&lt;Index /&gt; 按预期进行渲染,console.log(this.props.exists) 按预期打印出false

但是,当我这样渲染页面时会出现问题...

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

console.log(this.props.exists) 打印 true,这是正确的。但是,&lt;Index /&gt; 页面正在呈现,而不是 &lt;Register /&gt; 页面。

我怀疑这与它有关

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

由于某种原因,this.state.register 被正确读取,但从未到达 this.props.exists

谁能告诉我为什么会这样?

【问题讨论】:

  • 不要直接设置状态。请改用getInitialState
  • this.props.exists === undefined 这就是为什么第一个正确通过而第二个失败
  • @IslamIbakaev 有什么奇怪的,它不是未定义的,查看上面代码中的 console.log,它打印出来的是 true
  • @IslamIbakaev oh nvm 你是对的,它打印 true 但未定义,你能解释一下原因吗?

标签: javascript node.js reactjs


【解决方案1】:

我认为你应该使用reactDom.renderToString(&lt;App exists={true} /&gt;) 而不是reactDom.renderToString(App({exists: true}));

【讨论】:

  • 这没有解决问题
  • 我看到你使用服务器端渲染和反应,只要确保你的浏览器代码不会重新加载组件。
猜你喜欢
  • 2014-03-28
  • 1970-01-01
  • 2020-02-19
  • 2021-01-21
  • 1970-01-01
  • 2019-08-26
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多