第一次调用组件

时间:2016-04-18 17:52:58

标签: reactjs redux react-redux

我将observable-react-project转换为Redux。我有主容器 - App.js和他的下一个方法:

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:true。 代码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?

2 个答案:

答案 0 :(得分:1)

是的,mapStateToProps应该在首次安装组件时执行。

要检查两件事:

  • 您确定该功能未被调用吗?确保从mapStateToProps返回一个对象,即使它只是一个空的{}
  • PCode类可能应该延伸React.Componentclass PCode extends React.Component {}

答案 1 :(得分:-2)

我正在努力。我说为了简化这个问题,我扩展了React.Component ......不是这个检查问题!