2017-04-12 9 views
-1

警告:setState(...):マウントされたコンポーネントまたはマウントされているコンポーネントのみを更新できます。この は、通常、マウントされていないコンポーネントに対してsetState()を呼び出したことを意味します。 これはノーオペレーションです。 GetStartedコンポーネントのコードを確認してください。ここでReactコンポーネントがこのエラーをスローする

は私のコードです:

export class GetStarted extends Component { 
    constructor(props) { 
    super(props) 

    this.state = { 
     open: false, 
     canSubmit: false, 
     freelancershow:false, 
     ifclient:false, 
     type:'', 
     phone: "", 
     show:true, 
     showOtp:false, 
     user:{}, 
     client:{}, 
     loggedin:'', 
     success:false, 
     message:'', 
     job_types :'', 
     rates:'', 
     techs:'', 
     id:'', 
     searchFor:'Freelancers', 
     userSearchTerm:'', 
     jobSearchTerm: [], 
     searchtypes:0, 
     freejobSearchTerm:'', 
     freeSearchTerm:'', 
     company_name:'', 
     dataSearch:[], 
     getskillarr: [], 
     searchString:'', 
     domainSearch: [], 
     skillArr:[], 
     chipData: [], 
     chipArr: [], 
     searchText: '', 
     dataSource: [], 
     userName: "", 
     admindata: [] 
    } 
    this.styles = { 
     chip: { 
     margin: 4, 
     }, 
     wrapper: { 
     display: 'flex', 
     flexWrap: 'wrap', 
     }, 
    }; 
    this.chipData = this.state.chipData 
    const chipToDelete = this.state.chipData.map((chip) => chip.key) 
    this.chipData.splice(chipToDelete, 1) 
    this.setState({chipData: this.chipData}) 

    /* dialog actions */ 
    this.handleDialogClose = this.handleDialogClose.bind(this) 
    this.handleDialogOpen = this.handleDialogOpen.bind(this) 
    this.handleBackToApp = this.handleBackToApp.bind(this) 
    this.handleOpen=this.handleOpen.bind(this) 
    this.handleClose=this.handleClose.bind(this) 
    this.logout = this.logout.bind(this) 
    this.handleSearch = this.handleSearch.bind(this) 
    this.handleChange =this.handleChange.bind(this) 
    this.getskill = this.getskill.bind(this) 
    } 

    handleClose() { 
    this.setState({open: false}); 
    } 

    onDatesChange({ startDate, endDate }) { 
    this.setState({ startDate, endDate }) 
    } 

    onFocusChange(focusedInput) { 
    this.setState({ focusedInput }) 
    } 


    componentWillMount() { 
    const { dispatch } = this.props 
    dispatch(GetBlogs()) 
    dispatch(GetEvents()) 
    dispatch(SearchSkills()) 
    dispatch(GetAllFeaturedUsers()) 
    } 

    componentWillReceiveProps(nextProps) {  
    this.setState({ admindata: nextProps.admindata}) 
    if (nextProps.login.sendOtpResponse && nextProps.login.sendOtpResponse.success === false) { 
     this.setState({ 
     showOtp: false, 
     err: nextProps.login.sendOtpResponse.message 
     }) 
    } else if (nextProps.login.sendOtpResponse && nextProps.login.sendOtpResponse.success === true) { 
     this.setState({ 
     showOtp: true, 
     phone: nextProps.login.sendOtpResponse.user.profile.phone.mobile 
     }) 
    } else if (nextProps.login.verifyOtpResponse && nextProps.login.verifyOtpResponse.success === false) { 
     this.setState({ 
     err: nextProps.login.verifyOtpResponse.message 
     })  
    } else if (nextProps.login.verifyOtpResponse && nextProps.login.verifyOtpResponse.success === true) { 
     this.setState({ 
     success: nextProps.login.verifyOtpResponse.success, 
     open: false, 
     type: nextProps.login.verifyOtpResponse.user.type, 
     user: nextProps.login.verifyOtpResponse.user, 
     userName: nextProps.login.verifyOtpResponse.user.profile.name 
    })  
    } else if(nextProps.login.length > 0 && nextProps.login[0].message === 'skills found') { 
     let arr = [] 
     for(var i = 0; i < nextProps.login[0].data.length; i++) { 
      arr.push(nextProps.login[0].data[i].label) 
     } 
     this.setState({skillArr:arr}) 
     } else if(nextProps.login.length > 0 && nextProps.login[0].message === 'searchDomains found') { 
      let arr = [] 
     for(var m = 0; m < nextProps.login[0].data.length; m++) { 
     arr.push(nextProps.login[0].data[m].name) 
     } 
     this.setState({ skillArr: arr }) 
     } else if(nextProps.login.length > 0 && nextProps.login[0].message === 'searchDomains found') { 
     let arr = [] 
     for(var n = 0; n < nextProps.login[0].data.length; n++) { 
     arr.push(nextProps.login[0].data[n].text) 
     } 
     this.setState({ skillArr: arr }) 
    } else if(nextProps.login.length > 0 && nextProps.login[0].data) { 
     this.setState({ dataSearch: nextProps.login[0].data }) 
     } 
     else { 
     this.setState({ open: true }) 
    } 
    } 

    handleDialogClose() { 
    this.setState({ open: false }) 
    } 

    handleDialogOpen() { 
    this.setState({ open: true }) 
    } 

    handleOpen() { 
    this.setState({ open: true }) 
    } 

    handleBackToApp() { 
    } 

    change_form(){ 
    this.setState({ show: !this.state.show }) 
    } 

    logout(){ 
    if(!this.state.ifclient){ 
     localStorage.clear(); 
     window.location = "/" 
    } else { 
     localStorage.clear(); 
     window.location = "/" 
    } 
    } 
getskill(values) { 
this.state.getskillarr.indexOf(values) > -1 ? this.state.getskillarr.splice(this.state.getskillarr.indexOf(values), 1) : this.state.getskillarr.push(values) 
this.setState({getskillarr: this.state.getskillarr}) 
this.handleSearch() 
} 
    handleSearch() { 
    var data = this.state 
    const { dispatch } = this.props 
    if(this.state.searchFor === "job") { 
     var newobj = {} 
     newobj.searchText = data.getskillarr 
     newobj.userSearchTerm = data.userSearchTerm 
     newobj.rates = data.rates || 'hourly' 
     newobj.type = 'job' 
     localStorage.setItem('HomepageSearchData', JSON.stringify(newobj)) 
    } else { 
     var newobj2 = {} 
     newobj2.searchText = data.getskillarr 
     newobj2.userSearchTerm = data.userSearchTerm 
     newobj2.rates = data.rates || 'hourly' 
     newobj2.type = 'freelancer' 
     localStorage.setItem('HomepageSearchData', JSON.stringify(newobj2)) 
    } 
    const route = '/filter-results' 
    browserHistory.push(route) 
    } 

    handleChange(type,e){ 
    const state = this.state 
    if(type === 'userSearch') { 
     state.userSearchTerm = e.target.value 
    } else if(type === 'techs') { 
     state.jobSearchTerm.push(e.target.value) 
    } else if(type !== 'techs') { 
     state.domainSearch.push(e.target.value) 
    } 
    this.setState(state) 
    } 

    changeUser (value) { 
    const state = this.state 
    state.searchFor = value 
    this.setState(state) 
    this.setState({user: value}) 
    } 

    render() { 
    var slide = this.state.admindata.length 
    var settings = { 
     dots: false, 
     infinite: true, 
     speed: 500, 
    slidesToShow:4, 
    slidesToScroll:1, 

     adaptiveHeight: true, 
     responsive: [ 
     { 
      breakpoint: 768, 
      settings: { 
      arrows: false, 
      centerMode: true, 
      slidesToShow: 3 
      } 
     }, 
     { 
      breakpoint: 480, 
      settings: { 
      arrows: false, 
      centerMode: true, 
      slidesToShow: 1 
      } 
     } 
     ] 
    } 
    var featuredSettings = { 
     dots: false, 
     infinite: false, 
     speed: 500, 
     slidesToShow:4, 
     slidesToScroll:1, 
     adaptiveHeight: true, 
     responsive: [ 
     { 
      breakpoint: 768, 
      settings: { 
      arrows: false, 
      centerMode: true, 
      slidesToShow: 3 
      } 
     }, 
     { 
      breakpoint: 480, 
      settings: { 
      arrows: false, 
      centerMode: true, 
      slidesToShow: 1 
      } 
     } 
     ] 
    } 
    return (
     <MuiThemeProvider muiTheme={muiTheme}> 
     <div>  
      { 
    <div className="home-section"> 
       <div className="container"> 
       <div className="row"> 
      <div className="col-md-12 col-xs-12">    

      <div className="new-search"> 
       <h1 className="f-bold text-blue">Amgigs</h1> 
       <p className="sub-head">Find freelancers and contractors online at your timezone and close to your proximity.</p> 

       <div className="input-group"> 
          <div className="input-group-btn"> 
         <IconMenu 
          iconStyle={{color: '#999',padding:'0 important'}} 
          iconButtonElement={<IconButton id="icbtn"><MoreVertIcon /></IconButton>} 
          anchorOrigin={{horizontal: 'left', vertical: 'top'}} 
          targetOrigin={{horizontal: 'left', vertical: 'top'}} 
          > 
          <MenuItem onClick={this.changeUser.bind(this,'freelancer')} primaryText="Find Freelancer" /> 
          <MenuItem onClick={this.changeUser.bind(this,'job')} primaryText="Find Job" /> 

          </IconMenu> 
         </div> 
       {/* <input type="text" className="form-control" aria-label="..." placeholder="Search"/>*/} 

          <input type="text" className="form-control" aria-label="..." placeholder={this.state.searchFor} onChange={this.handleChange.bind(this,'userSearch')} value={this.state.userSearchTerm} /> 

          <div className="input-group-btn"> 
      {/*<button type="button" className="btn btn-primary">Search</button>*/} 
      <button type="button" id="homesearchbtn" className="btn btn-lg btn-primary" onClick={this.handleSearch}>Search</button> 
         </div> 
         </div> 
          </div> 
      <div className="col-md-8 col-md-offset-2 text-center"> 
      <div className="category"> 
       <h4>Search freelancers at any categories</h4> 

       {this.state.skillArr.map((skill, i) => { 
        return(
        <button key={i} className="btn btn-success" onClick={this.getskill.bind(this, skill)}>{skill}</button> 
        ) 
       })} 

       </div> 
        </div> 
     </div> 
     </div> 
     </div> 
    </div> } 
     <div className="container"> 
     <div className="row"> 
      <div className="col-md-12"> 

       {this.state.admindata.length > 0 ? 
        <div> 
        <h3>Featured Freelancers</h3> 
        <Slider {...featuredSettings}> 
        {this.state.admindata.map(function(data,i){ 
         return(<div className="parking-wrapper" key={i}> 
          <div className="parking-inner-container"> 
           <div className="parking-inner"> 
           <div className="parking-container"> 
           <div className="parking-image-wrapper"> 
            <div className="availability-btn"> 
             <Link className="btn btn-primary text-white" target="_blank" to={'http://www.amgigs.com:2368'+data.url}>Chat Now</Link> 
            </div> 
             <div className="parking-image-cover" style={{ backgroundImage: `url(${data.profile.picture})` }}> 
            </div> 
           </div> 
           </div> 
          </div> 
          </div> 
         <div className="parking-info"> 
          <div className="parking-title"> 
           <h1>{data.profile.name}</h1> 
          </div> 
          <div className="parking-location"> 
          <h2><EllipsisText text={data.email} length={'50'} /></h2> 
          </div> 
         </div> 
         </div> 
        ) 
        }) 
       } 
       </Slider> 
       </div> 
       : "" } 
       </div> 
      </div> 
     </div> 




<div className="parking-section"> 
    <div className="container"> 
    <div className="row"> 
     <div className="col-md-5 col-sm-5"> 
     <div > 
      <h2>Hire expert freelancers for your job online</h2> 
      <p>Freelancers for thousands of jobs from web design, mobile app development, product design to manufacturing </p> 
        <Link to="/signup" className="btn btn-primary">Get Started with amgigs</Link> 
     </div> 
     </div> 
     <div className="col-md-7 col-sm-7"> 
     <img className="img-responsive" src="https://membermouse.com/wp-content/uploads/2016/09/Freelancer-Liability-Featured.png" alt=""/> 
     </div> 
    </div> 
    </div> 
    </div> 


     <div className="container"> 
     <div className="row"> 
      <div className="col-md-12"> 
       <h3>Blogs</h3> 
       {this.props.blogdata.length > 0 ? 
       <Slider {...settings}> 
        {this.props.blogdata.map(function(data,i){ 
        return(<div className="parking-wrapper" key={i}> 
        <div className="parking-inner-container"> 
         <div className="parking-inner"> 
         <div className="parking-container"> 
         <div className="parking-image-wrapper"> 
          <div className="availability-btn"> 
           <Link className="btn btn-primary text-white" target="_blank" to={'http://www.amgigs.com:2368'+data.url}>Read more</Link> 
        </div> 
           <div className="parking-image-cover" style={{ backgroundImage: `url(http://www.amgigs.com:2368${data.image})` }}> 
          </div> 
         </div> 
         </div> 
        </div> 
        </div> 
       <div className="parking-info"> 
        <div className="parking-title"> 
         <h1>{data.title}</h1> 
        </div> 
        <div className="parking-location"> 
         <h2><EllipsisText text={data.markdown} length={'70'} /></h2> 
        </div> 
       </div> 
        </div>) 
       }) 
       } 
      </Slider> 
      : "" } 
        </div> 
       </div> 
       </div> 

      <div className="container"> 
      <div className="row"> 
      <div className="col-md-12"> 
       <h3>Events</h3> 
       {this.props.eventdata.length > 0 ? 
       <Slider {...settings}> 
        {this.props.eventdata.map(function(data,i){ 
        return(<div className="parking-wrapper" key={i}> 
        <div className="parking-inner-container"> 
         <div className="parking-inner"> 
         <div className="parking-container"> 
         <div className="parking-image-wrapper"> 
          <div className="availability-btn"> 
           <Link className="btn btn-primary text-white" target="_blank" to={'http://www.amgigs.com:2369'+data.url}>Read more</Link> 
          </div> 
           <div className="parking-image-cover" style={{ backgroundImage: `url(http://www.amgigs.com:2369${data.image})` }}> 
          </div> 
         </div> 
         </div> 
        </div> 
        </div> 
       <div className="parking-info"> 
        <div className="parking-title"> 
         <h1>{data.title}</h1> 
        </div> 
        <div className="parking-location"> 
         <h2><EllipsisText text={data.markdown} length={'70'} /></h2> 
       </div>  
     </div> 
        </div>) 
       }) 
       } 
      </Slider> 
      : "" } 
     </div> 
    </div> 
    </div> 


     </div> 
     </MuiThemeProvider> 
    ) 
    } 
} 

GetStarted.propTypes = { 
    children: PropTypes.node, 
    handleSubmit: PropTypes.func, // redux-form 
    pristine: PropTypes.bool, // redux-form 
    submitting: PropTypes.bool, // redux-form 
    dispatch: PropTypes.func, // redux 
    handleDialogClose: PropTypes.func, // close dialog 
    isSubmitting: PropTypes.bool, 
    err: PropTypes.string, 
    ifclient: PropTypes.bool, 
    showOtp: PropTypes.bool, 
    blogdata:PropTypes.array, 
    eventdata:PropTypes.array, 
    admindata : PropTypes.array, 
} 

const stateToProps = (state) => { 
    return { 
    login: state.login, 
    isSubmitting: state.login.submitting, 
    err: state.signup.err, 
    Clientid:state.signup.Clientid, 
    ifclient:state.ifclient, 
    userType:state.signup.userType, 
    showOtp:state.showOtp, 
    blogdata:state.blogs.data.data ? state.blogs.data.data.posts : [], 
    eventdata:state.events.data.data ? state.events.data.data.posts : [], 
    admindata : state.admin.data ? state.admin.data.data : [] 
    } 

} 
export default connect(stateToProps)(GetStarted) 

答えて

0

あなたが他の特性のために行ったように代わりにあなたが状態を初期化することができ、コンストラクタでSETSTATE呼び出しを削除してください。

"Reactコンポーネントのコンストラクタは、マウントされる前に呼び出されます。"
https://facebook.github.io/react/docs/react-component.html#constructor

関連する問題