javascript - 刷新react页面不会将父状态传递给子状态

标签 javascript reactjs react-redux

当我第一次尝试加载组件时,父状态会完美地传递给子组件。每件事看起来都很好。但是,当我刷新页面时,我只是看不到传递给子级的状态。我只是看到 child 的一些静态内容。以下是我的 parent :

render(){

    const {courses} = this.props;
    // debugger;
    let fn = (child) => {
        return React.cloneElement(child, {
            courses: courses
        });
    };

    let childrenWithProps = React.Children.map(this.props.children, fn);

    return (
        <div>
            <div className="container jumbotron jumbotron-fluid">
                <h1>CoursesPage</h1>
                <p>This page adds and lists all the courses</p>
                <Link to="/courses/courseslist">
                    <Button color="primary">Course Listing</Button>
                </Link>
            </div>
            {childrenWithProps}
        </div>

    );
}
}

CoursesPage.propTypes = {
    courses: PropTypes.array.isRequired,
    actions: PropTypes.object.isRequired,
    children: PropTypes.object.isRequired
};

function mapStateToProps(state, ownProps){
    return {
        courses: state.courses
    };
}

//mapping all course actions to actions in the props
function mapDispatchToProps(dispatch){
    return {
        actions: bindActionCreators(courseActions, dispatch)
    };
}


export default connect(mapStateToProps, mapDispatchToProps)(CoursesPage);

此外,这是我的子组件:

class CourseDetailsAndList extends React.Component {
constructor(props, context){
        super(props, context);
        this.state = {
            courses: this.props.courses
        };
    }
render(){
    const {courses} = this.props;
    return (
        <div>
            <h1>Courses</h1>
            <CourseList courses={this.state.courses}/>
        </div>
    );
  }
}

CourseDetailsAndList.propTypes = {
    courses: PropTypes.array.isRequired
};

当我刷新页面时,我没有看到子级中传递的类(class)状态,只看到一个空白的子级。同样,我在控制台中看到此警告,这看起来肯定是原因之一:

Warning: Failed prop type: The prop `courses` is marked as required in `CourseDetailsAndList`, but its value is `undefined`.
in CourseDetailsAndList (created by RouterContext)
in RouterContext (created by Router)
in Router
in Provider

有人可以告诉我将状态传递给子组件时哪里出错了吗?为什么会出现警告?

最佳答案

以下是您尝试使用组件的简化版本来完成的工作示例:

https://jsfiddle.net/79qk1r50/2/

class ParentComponent extends React.Component {
  render() {
    const {parentProp} = this.props;
    const childrenWithProps = React.Children.map(this.props.children, function(child) {
        return React.cloneElement(child, {parentProp: parentProp});
    });

    return (
      <div>
        <h1>ParentComponent</h1>
        My parentProp is: {parentProp}
        {childrenWithProps}
      </div>
    );
  }
}

class ChildComponent extends React.Component {
  render(){
    const {parentProp} = this.props;
    return (
      <div>
        <h2>Child Component</h2>
        Received from parent: {parentProp}
      </div>
    );
  }
}

React.render(
  <ParentComponent parentProp={'foo'}>
    <ChildComponent />
    <ChildComponent />    
  </ParentComponent>,
  document.getElementById('container'));

关于javascript - 刷新react页面不会将父状态传递给子状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44618755/

相关文章:

javascript - 如何在 React Native 中创建国家和城市下拉菜单

javascript - Redux-Form 理解多页表单 Ajax PUT

javascript - 如何从 React/Redux 中的对象生成和呈现无序列表?

reactjs - React无状态组件中的TypeError : dispatch is not a function.

javascript - 如何计算自定义值的总和

javascript - 如何合并 Angular js的两个对象数组?

javascript - React Native 结束游戏屏幕不显示并崩溃

reactjs - 如何在 map 功能中的 onclick 上切换类?

javascript - AngularJS:循环 POST 请求并将每个索引传递到相关响应中

php - 将 HTML 页面保存为 .php?