【问题标题】:Multiple popovers for different buttons with same Id具有相同 ID 的不同按钮的多个弹出窗口
【发布时间】:2021-03-03 19:49:21
【问题描述】:

我有一个带有 STATUS 列的表,所以每当状态有错误值时,我需要显示错误的弹出框 onClick 并使用弹出框内的关闭按钮将其关闭。问题是当我单击第一行错误时,表中所有错误的所有弹出窗口都会出现,当我关闭一个时,所有错误都会关闭。但我需要弹出框仅在单击错误状态时打开和关闭。我正在使用反应框架。有人可以帮我吗? 这是我的弹出框代码

constructor(props) {
        super(props);
        this.state = { popoverShow: false };
}

getTarget = () => {
    return ReactDOM.findDOMNode(this.target);
};

handleToggle = () => {
    this.setState({ popoverShow: !this.state.popoverShow });
};

let installedDCToolTip = (
                    <Popover id="datacollector-error-message-popover"
                        className="netapp-help-inline__popover tw-mt-10px"
                    >
                        <PopoverDiv className="tw-leading-lg">
                            <span className="row tw-font-body tw-text-lg tw-inline-flex tw-justify-between" >Error
                            <button
                                    id="close-datacollector-error-popover"
                                    type="button"
                                    className="btn-icon-no-bg close"
                                    onClick={this.handleToggle}>
                                    <i className="oci-app oci-close"></i>
                                </button>
                            </span>
                            <hr className="tw-mb-sm" />
                            <div>{info.record.message}</div>
                            <a
                                id="datacollector-status-error-docs"
                                href={DATA_COLLECTOR_ERROR_HELP_DOC_URL}
                                target="_blank"
                                rel="noopener noreferrer"
                            >
                                Need Help?
                        </a>
                        </PopoverDiv>
                    </Popover>
                );

叠加

return (info.value === COLLECTOR_STATUS.ERROR || info.value === COLLECTOR_STATUS.RETRYING) ? 
 <button
                            id="datacollector-error-detail-button"
                            ref={button => {
                                this.target = button;
                            }}
                            onClick={this.handleToggle}
                        >
                            <span className="tw-text-hyperlink">Error Detail</span>
                        </button>
                        <Overlay {...sharedPropsForOverlay} placement="bottom">
                            {installedDCToolTip}
                        </Overlay>
                    </div>
                    
                    : <span>{_.startCase(_.capitalize(info.value))}</span>;

 render() {
        const sharedPropsForOverlay = {
            container: this,
            target: this.getTarget,
            show: this.state.popoverShow


           };
/* render table */

    }

【问题讨论】:

  • 能否请您发布整个组件,而不仅仅是它们的 sn-ps,因为现在我不知道哪个是哪个

标签: javascript reactjs overlay react-bootstrap popover


【解决方案1】:

为每一行维护一个自我状态。例如

const YourRow = ()=>{
  
   const [popoverOpen, setPopOverOpen] = useState(false);
   const someActionThatChangeState = ()=>{
       setPopOverOpen(true);
   } 


   return <tr>

        ====================
        ====================
        <PopOver></PopOver>
        <SomeIconORButton reactEvent(onCick etc)={someActionThatChangeState} />
         </tr> //This is specific to your row you can change what ever you want
 }

【讨论】:

  • 嗨,表格组件也被其他功能使用,所以我不能真正修改每一行。有没有使用popover或overlay本身的解决方法?或者我可以使用任何其他 react 或 bootstrap 组件来实现此功能吗?
猜你喜欢
  • 2014-03-16
  • 2021-07-12
  • 1970-01-01
  • 2023-02-21
  • 2018-08-02
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多