2016-04-18 63 views
1

我將observable-react-project轉換爲Redux。我有主容器 - App.js和他旁邊的包括方法:第一次調用組件時不會調用mapStateToProps

handleDone() { 
    this.setState({ showPLock: false }); 
} 

render() { 
    return (
     <div className="mainContainer"> 
      {this.props.children} 
      { 
       this.state.showPLock 
        ? <PCode handleDone={this.handleDone.bind(this)}/> 
        : null 
      } 
     </div> 
    ); 
} 

在第一次啓動應用程序showPLock:真。 代碼PCode:

class PCode extends Component{ 
constructor (props) { 
    super(props); 

    this.state = { 
     passcode: '' 
    }; 
} 

render() { 
    //something doing 
} 
} 

PCode.contextTypes = { 
    router: PropTypes.object.isRequired, 
    store: PropTypes.object.isRequired 
}; 

PCode.propTypes = { 
    dispatch: PropTypes.func.isRequired, 
}; 

function mapStateToProps(stateStore) { 
    const { authReducer } = stateStore; 
    if (authReducer.pcode !== null) { 
     //something return 
    } 
} 

export default connect(mapStateToProps)(PCode); 

調用mapStateToProps時出現問題。他不會立即打到組件上。因此,如果我打電話回報一些東西,例如:

const { data } = this.props; 

當然會發出一個未定義的。

爲什麼在第一次調用組件時沒有調用mapStateToProps?

回答

1

是的,mapStateToProps應在組件的第一個安裝位置上執行。

兩件事情來檢查:

  • 確定的功能不會被調用?確保你從mapStateToProps返回一個對象,即使它只是一個空{}
  • PCode類可能應該延長React.Componentclass PCode extends React.Component {}
+0

1)在PCode中調用mapStateCalled函數,調用mapStateCalled後調用app.js 2)檢查,好吧 – ximet

+0

@ximet是你的問題解決了嗎? – mtaube

+0

沒有。你的兩件事不能解決我的問題 – ximet

-2

我正在努力。我說爲了簡化這個問題,我擴展了React.Component ...不是這個檢查問題!

相關問題