【发布时间】:2014-12-12 01:19:47
【问题描述】:
让我先说我是 ReactJS 的新手。我正在尝试通过创建一个使用 React 填充数据的简单站点来学习。我有一个 JSON 文件,其中包含将通过 map 循环的链接数据。
我尝试将其设置为组件状态,然后通过道具将其传递给导航栏链接,但我收到“未捕获的类型错误:无法读取 null 的属性‘数据’”
我试图四处寻找解决方案,但一无所获。
注意:当我尝试硬编码一个对象并通过它映射时,它返回的映射是未定义的。但是我不确定这是否与 setState 错误直接相关。
/** @jsx React.DOM */
var conf = {
companyName: "Slant Hosting"
};
var NavbarLinks = React.createClass({
render: function(){
var navLinks = this.props.data.map(function(link){
return(
<li><a href={link.target}>{link.text}</a></li>
);
});
return(
<ul className="nav navbar-nav">
{navLinks}
</ul>
)
}
});
var NavbarBrand = React.createClass({
render: function(){
return(
<a className="navbar-brand" href="#">{conf.companyName}</a>
);
}
});
var Navbar = React.createClass({
getInitalState: function(){
return{
data : []
};
},
loadNavbarJSON: function() {
$.ajax({
url: "app/js/configs/navbar.json",
dataType: 'json',
success: function(data) {
this.setState({
data: data
});
console.log(data);
console.log(this.state.data);
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
componentDidMount: function(){
this.loadNavbarJSON();
},
render: function(){
return(
<nav className="navbar navbar-default navbar-fixed-top" role="navigation">
<div className="container-fluid">
<div className="navbar-header">
<NavbarBrand />
</div>
<NavbarLinks data={this.state.data} />
</div>
</nav>
);
}
});
var Header = React.createClass({
render: function(){
return(
<Navbar />
);
}
});
React.renderComponent(
<Header />,
document.getElementById('render')
);
【问题讨论】:
-
你拼错了
getInitialState(你在初始的 t 后面缺少了 'i') -
看起来@trekforever 找到了您的问题。顺便说一句,您的
console.log(this.state.data)可能不会打印正确的结果,因为 React 会将setState调用排队。如果您想在调用setState后打印您的状态,您必须提供回调:this.setState({something: 'blah'}, function() { console.log(this.state.something);}); -
@trekforever DERP,谢谢!
-
@edoloughlin 感谢您提供更多信息!
-
我也遇到了这个问题。 “呵呵,一个拼写错误,多么粗心,”我想。然后我去检查了我的代码。我也拼错了。完全相同的方式。 ??????
标签: javascript state reactjs