【问题标题】:React: Closing Modal in Child Component from ParentReact:从父级关闭子组件中的模态
【发布时间】:2018-05-18 20:40:27
【问题描述】:

我在子组件中有一个模式,它处理父组件中的删除功能。孩子保持模式的状态(打开或关闭),因为这似乎是最合乎逻辑的地方。

家长

 removeItem() {
   console.log('clicked');
  };

 ...

 <DeleteButton deleterecord={()=>this.removeItem(data.row._original._id)}/>

儿童

close() {
  this.setState({ showModal: false })
};

open() {
  this.setState({ showModal: true })
};


render() {

 return(
  <div>
    <Button
    bsStyle="primary"
    bsSize="small"
    onClick={this.open.bind(this)}
  >
    Delete
  </Button>

  <Modal
    show={this.state.showModal}
    onHide={this.close.bind(this)}
    bsSize="small"
    >
   ...

在 removeItem 代码运行后,我应该如何从父级关闭模式。

【问题讨论】:

  • 您可以从父组件调用子组件中的函数,该函数实质上会更新子组件的状态。检查这个stackoverflow.com/questions/40235420/…
  • 编辑了我的解决方案以使用引用来调用子关闭函数。检查它是否有效。

标签: javascript reactjs react-bootstrap


【解决方案1】:

您可以使用 ref 来调用子关闭函数吗?

家长

    removeItem() {
       console.log('clicked');
       this.child.close();
    }

   render() {
      return (
         <div>
            <ChildWithModal ref={(ref) => { this.child = ref; }} />
         </div>
      );
   }

儿童

...

close() {
   this.setState({ showModal: false })
};

【讨论】:

  • 感谢您,但 组件也在父组件中。我将修改我的问题以包含一些子代码
  • 感谢这个“this.child”究竟应该是什么?子组件的名称?
  • "child" 是参考的名称。您可以指定任何您喜欢的名称 =)。尝试使用更容易识别组件的东西。将其视为子组件的别名。
  • 非常感谢。这就是我的想法,但它并没有关闭模式。 :-(
  • 如果我从 removeItem 函数控制台记录“this.child”,我可以看到孩子及其状态,但我看不到 close()。虽然这个 close() 不在孩子的渲染范围内。是这个问题吗?
猜你喜欢
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多