내가 ReactJS에 초보자라고 말하면서 머리말을 붙이겠습니다. React를 사용하여 데이터를 채우는 간단한 사이트를 만들어서 배우려고합니다. 지도를 통해 반복되는 링크 데이터가 포함 된 JSON 파일이 있습니다. 나는 다음 구성 요소 상태로 설정 소품을 통해 네비게이션 바에 링크에 전달하지만 "catch되지 않은 형식 오류를 : 널 (null)의 '데이터'속성을 읽을 수 없습니다"는 무엇입니까 시도ReactJS this.state null
는
나는 주위를 찾기 위해 노력 솔루션을 찾을 수 있지만 아무것도 찾을 수 없습니다.
참고 : 오브젝트를 하드 코딩하고이를 통해 맵핑하면 맵이 리턴되지 않습니다. 그러나 그것은 setState 오류와 직접 관련이 있는지 확신하지 못합니다. 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
@trekforever처럼 보이는 것이 문제를 찾았습니다. React가'setState' 호출을 대기열에 넣을 것이므로,'console.log (this.state.data)'는 올바른 결과를 출력하지 않을 것입니다. 'setState'를 호출 한 후 상태를 출력하려면 콜백을 제공해야합니다 : 'this.setState ({something : 'blah'}, function() {console.log (this.state.something); }); ' – edoloughlin
@trekforever DERP, 고마워! –