【发布时间】: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});
<Index /> 按预期进行渲染,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,这是正确的。但是,<Index /> 页面正在呈现,而不是 <Register /> 页面。
我怀疑这与它有关
( 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