2017-10-29 11 views
0

자식 구성 요소 (TableOfContents)에서 부모 구성 요소 (App)의 setState,이 경우에는 상태 비 저장 기능 구성 요소이므로 모든 것이 테이블을 다시 렌더링하고 업데이트 할 수 있습니다. 이벤트 처리기 (changeUrl)가 호출되고 상태는 내가 아는 한 변경되지만 아무것도 렌더링되지 않습니다. 테이블이 업데이트되지 않습니다!자식 구성 요소의 이벤트 처리기 설정 상태가 부모 구성 요소를 다시 렌더링하지 않습니다.

class App extends React.Component { 
    root = 'https://fcctop100.herokuapp.com/api/fccusers/top/'; 
    allTime = 'alltime'; 
    recent = 'recent'; 

    constructor(props) { 
     super(props); 
     this.state = { data: null, 
        url: this.root + this.allTime }; 
     this.changeUrl = this.changeUrl.bind(this); 
    } 

    componentDidMount() { 
     return fetch(this.state.url) 
     .then(response => response.json()) 
     .then(responseJson => { 
      this.setState({ data: responseJson }); 
     }); 
    } 

    changeUrl() { 
     this.setState({ url: this.root + this.recent }); 
    } 

    render() { 
     return (
     <div id="container"> 
      <Head /> 
      <TableOfContents handleClick={this.changeUrl} /> 
      <Tables data={this.state.data}/> 
     </div> 
    ); 
    } 
} 

const Head = (props) => { 
    return (
     <div className="head"> 
     freeCodeCamp Leaderboard 
     </div> 
    ); 
} 

const TableOfContents = (props) => { 
    return (
     <div className="tableOfContents"> 
     <tr className="headers" > 
      <td>#</td> 
      <td id='special'>Camper Name</td> 
      <td onClick={props.handleClick} style={{cursor: 'pointer'}}>Points in last 30 days</td> 
      <td>All time points</td> 
     </tr> 
     </div> 
    ); 
} 

const Tables = (props) => { 
    if (!props.data) return <p>Loading...</p>; 
    return (
     <div className="tables"> 
     { 
      props.data.map((d, i) => 
       <tr id={'table' + i}> 
        <td>{i + 1}</td> 
        <td><img src={d.img} /></td> 
        <td>{JSON.stringify(d.username).replace(/"/g, '')}</td> 
        <td>{JSON.stringify(d.recent)}</td> 
        <td>{JSON.stringify(d.alltime)}</td> 
       </tr>) 
     } 
     </div> 
    ); 
} 

ReactDOM.render(
    <App />, 
    document.getElementById('app') 
); 

답변

0

사용 componentDidUpdate도 함께 componentDidMount와 함께, 당신은 일을 새로운 데이터

+0

와 테이블을 채우는하려는 경우, 논리를 가져 오는 일을 주셔서 감사합니다! :) –