reactjs에서 상태와 관련된 몇 가지 어려움에 직면하고 있습니다. ComponentWillMount는 컴포넌트가 렌더링되기 전에 ajax 호출로 데이터를로드하는 곳입니다. 나는로드 된 데이터가있는 패널 스택을 채우고 선상에 보여주는 간단한 간단한 프로젝트를 가지고있다. 그러나 ajax 호출의 데이터는 구성 요소 렌더링 전에 설정되지 않으며 이로 인해 빈 배열이있는 보드가 렌더링됩니다.componentWillMount가 렌더링 전에 완료되지 않았습니다.
import React from "react";
import {Panel} from "./Panel";
export class Board extends React.Component{
constructor(props){
super();
this.state={news: []};
}
componentWillMount(){
this.state={news: []};
$.ajax({
url: "http://localhost:3003/json.txt",
dataType: 'json',
cache: false,
success: function(data) {
var arr=[];
for (var key in data) {
arr.push(data[key]);
console.log(data[key]);
}
this.state={news: arr};
}});
}
render() {
return (
<div>
{
this.state.news.map((item,i)=> <Panel key="i"/>)
}
</div>
);
}
}
는 또한 마지막 클래스가하는 index.js입니다 :
import React from "react";
import {render} from "react-dom";
import {Board} from "./component/Board";
class App extends React.Component{
render(){
return(
<div>
<Board/>
</div>
);
}
}
render(<App/>, document.getElementById('middle'));
다음과 같이 문제의 뿌리입니다
import React from "react";
export class Panel extends React.Component{
render() {
return (
<div>
<div className="row panel">
<div className="col-sm-12 header">sfsfsf</div>
<div className="col-sm-12 body">fsdfsfs</div>
<div className="col-sm-12 footer">fasfaf</div>
</div>
</div>
);
}
}
및 이사회 클래스 등 때라도 내 완전한 소스입니다
Board.js 클래스에서 볼 수 있듯이 렌더 함수에서 배열을 초기화 한 다음 componentWillMount를 완료 한 후에 발생할 것으로 예상되는 뉴스 배열을 채우기 위해 componentWillMount를 사용하지만 내 경우에는 th 렌더링이 발생하면 배열이 비어 있습니다. 어떤 생각?
********* UPDATE ***************
나는 또한 componentDidMount 그것을 시도했지만 작동하지 않았다 같은 문제
당신이 설명하는 것은 비동기 함수 호출의 예상 결과입니다. 어디에서 호출하든 관계없이 반응주기는 서버 콜백을 기다리지 않고 렌더링됩니다. 동기 호출 (좋지는 않음)을 시도하거나 AJAX 호출을 사용하여 컴포넌트를 호출 한 다음 그 결과를 'Board'에 소품으로 전달해야합니다. –