阵营儿童组件更新问题

问题描述:

以下是我的代码阵营儿童组件更新问题

class Court extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      clubs: [], 
      clubId: 0 
     }; 

     this.onClubChange = this.onClubChange.bind(this); 
    }; 

    componentDidMount() { 
     if(this.props.auth.user.type == 'admin'){ 
      this.props.fetchClubs().then(
       (res) => this.setState({ 
        clubs: this.props.clubs 
       }) 
      ); 
     } 
     else { 
      this.props.fetchClubs(this.props.auth.user.id).then(
       (res) => this.setState({ 
        clubs: this.props.clubs 
       }) 
      ); 
     } 
    } 

    onClubChange(e){ 
     this.setState({ clubId: e.target.value}); 
    } 

    render() { 
     const { clubs, clubId } = this.state; 
     var clubsOptions = clubs.map(function(club){ 
      return (
       <option key={club.id} value={club.id}>{club.clubName}</option> 
      ); 
     }); 

     return (
      <div> 
       <form> 
        <div className={classnames('form-group')}> 
         <label className="control-label">Clubs</label> 
         <select 
          name = "clubId" 
          onChange={this.onClubChange} 
          className='form-control' 
          value={ clubId }> 
          <option value="0">Select Club...</option> 
          { clubsOptions } 
         </select> 
        </div> 
       </form> 
       { this.state.clubId != 0 ? <Courts clubId={this.state.clubId} /> : null } 
      </div> 
     ); 

    } 
} 

Court.propTypes = { 
    auth: React.PropTypes.object.isRequired, 
    clubs: React.PropTypes.array.isRequired, 
    fetchClubs: React.PropTypes.func.isRequired 
} 

function mapStateToProps(state) { 
    return { 
     clubs: state.clubs.clubs, 
     auth: state.auth 
    } 
} 
export default connect(mapStateToProps, { fetchClubs })(Court); 

当我改变下拉值时,会出现一个状态变化,但数据未在子组件法院更新

{ this.state.clubId != 0 ? <Courts clubId={this.state.clubId} /> : null } 

其次,第一次从下拉菜单中选择显示完美的数据,但在此之后没有变化显示

我在做什么错了?

试试吧,

class Court extends React.Component { 
 
    constructor(props) { 
 
     super(props); 
 
     this.state = { 
 
      clubs: [], 
 
      clubId: 0 
 
     }; 
 

 
     this.onClubChange = this.onClubChange.bind(this); 
 
    }; 
 

 
    componentDidMount() { 
 
     if(this.props.auth.user.type == 'admin'){ 
 
      this.props.fetchClubs().then(
 
       (res) => this.setState({ 
 
        clubs: this.props.clubs 
 
       }) 
 
      ); 
 
     } 
 
     else { 
 
      this.props.fetchClubs(this.props.auth.user.id).then(
 
       (res) => this.setState({ 
 
        clubs: this.props.clubs 
 
       }) 
 
      ); 
 
     } 
 
    } 
 

 
    onClubChange(e){ 
 
     this.setState({ clubId: e.target.value}); 
 
    } 
 

 
    render() { 
 
     const { clubs, clubId } = this.state; 
 
     var clubsOptions = clubs.map(function(club){ 
 
      return (
 
       <option key={club.id} value={club.id}>{club.clubName}</option> 
 
      ); 
 
     }); 
 
     
 
     let courts = <Courts clubId={this.state.clubId} />; 
 
     let courtsView = this.state.clubId != 0 ? courts : null; 
 

 
     return (
 
      <div> 
 
       <form> 
 
        <div className={classnames('form-group')}> 
 
         <label className="control-label">Clubs</label> 
 
         <select 
 
          name = "clubId" 
 
          onChange={this.onClubChange} 
 
          className='form-control' 
 
          value={ clubId }> 
 
          <option value="0">Select Club...</option> 
 
          { clubsOptions } 
 
         </select> 
 
        </div> 
 
       </form> 
 
       { courtsView } 
 
      </div> 
 
     ); 
 

 
    } 
 
} 
 

 
Court.propTypes = { 
 
    auth: React.PropTypes.object.isRequired, 
 
    clubs: React.PropTypes.array.isRequired, 
 
    fetchClubs: React.PropTypes.func.isRequired 
 
} 
 

 
function mapStateToProps(state) { 
 
    return { 
 
     clubs: state.clubs.clubs, 
 
     auth: state.auth 
 
    } 
 
} 
 
export default connect(mapStateToProps, { fetchClubs })(Court);

+0

感谢您的答复。但它不是更新 –

+0

我做了一个编辑。尝试新的一点。 –

+0

我解释了整个场景。可能您会得到这个问题 目前,我在下拉 选择 FCB MCF 3个选项当我选择FCB它的展示与FCB的数据,然后我选择MCF没有变化发生,那么我选择“选择'所以组件消失,然后选择MCF,现在数据显示相应 希望你得到问题 感谢你的预期 –