当前位置: 首页 > 知识库问答 >
问题:

如何在子组件的构造函数中等待父组件的道具

孔欣荣
2023-03-14

我创建了一个日历应用程序,可以添加注释。为了实现添加注释的功能,我创建了一些父组件,它有自己的状态timeStart,然后传递给子组件。子组件应该在构造函数中接受来自父母组件执行time1:this.props.time开始props。但是,由于setState函数异步ChildComponent没有时间等待父母组件的道具。

如何设置ChildComponent的初始状态,等待父母组件的道具(换句话说,同步)?

父组件:

class ParentComponent extends React.Component {

 constructor() {
    super();
    this.state = {
        timeStart:'00:00',
 };

 render(){

    //some code for changing this.state.timeStart

    return (<ChildComponent timeStart={this.state.timeStart}/>);
 }
}

ChildComponent:

class ChildComponent extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            time1:this.props.timeStart,
            time2:'00:00',
        };
        this.onTime1Change = this.onTime1Change.bind(this);
        this.onTime2Change = this.onTime2Change.bind(this);
        this.onSubmit = this.onSubmit.bind(this);
    }

    onSubmit(event){
        let el ={
            task:this.state.task.slice(),
            time1:this.state.time1.slice(),
            time2:this.state.time2.slice()
        };
        events.push(el);
        event.preventDefault();
    }


    onTime1Change(event){
        this.setState({time1: event.target.value});
    }

    onTime2Change(event){
        this.setState({time2: event.target.value});
    }

    render() {
        return (
            <div className="form">
                   <form onSubmit={this.onSubmit}>
                    <p><label><input type="time" step="3600" name="time1" value={this.state.time1}
                                                           onChange={this.onTime1Change}/></label>
                       <label><input type="time" step="3600" name="time2" value={this.state.time2}
                                                       onChange={this.onTime2Change}/></label></p>

                    <p><input type="submit" value="Submit" /></p>
                </form>
            </div>
        );
    }
}

export default ChildComponent;

共有1个答案

潘宸
2023-03-14

您可以使用组件的生命周期方法getDerivedStateFromProps来实现它。

更多详细信息请点击这里详细信息

 类似资料:
  • 我是新来的,对一些事情有点困惑。我在网上读了许多文章,声称组件不能改变自己的道具,但是父组件可以改变其子组件的道具。然而,我没有看到任何真正展示如何做到这一点的东西。 我希望能够做到这一点: 然而,我根本不知道如何做到这一点——尽管我在React上读到的几乎所有材料都说父母可以改变孩子的道具。我能正常工作的如下: 当我只想重新渲染子视图时,父视图需要重新渲染,这对我来说似乎有点过分了。如何更改<代

  • 在Vue 2.0中,文档和其他文档清楚地表明,父母与孩子之间的沟通是通过道具进行的。 父母如何通过道具告诉孩子事情发生了? 我应该看一个叫事件的道具吗?这感觉不对,替代方案也不对(/是子元素到父元素的,中心模型是远程元素的)。 我有一个父容器,它需要告诉它的子容器,可以在API上执行某些操作。我需要能够触发函数。

  • 本文向大家介绍如何在子组件中访问父组件的实例?相关面试题,主要包含被问及如何在子组件中访问父组件的实例?时的应答技巧和注意事项,需要的朋友参考一下 vue中如果父组件想调用子组件的方法,可以在子组件中加上ref,然后通过this.$refs.ref.method调用(https://www.cnblogs.com/jin-zhe/p/9523029.html) Vue中子组件调用父组件的方法,这里

  • 我需要使用父组件中子组件内部的状态值。 组成部分: 这是父组件:

  • 这里有一个问题,我在React.js应用程序中有一个FormControl组件,我在其中呈现了几种不同类型的其他组件。例如,在下面的代码中,您可以看到我呈现了一个CheckBoxWithLabel。你会注意到我传递了一个函数 因此,在CheckBoxWithLabel组件(代码未显示)中,我可以使用onChange事件(react中复选框的内置事件)调用它 因此,结果是,当单击复选框时,会调用父组

  • 我已经创建了一个按钮和文本组件,并将它们包含在搜索组件中。现在,我想用搜索组件的处理程序覆盖按钮的默认handleClick事件。但this.handleClick指向按钮组件的事件处理程序。。请帮忙。。我需要从搜索中单击,而不是从按钮中获取。。