React-bootstrap Popover:未定位在我期望的位置

Eri*_*ric 5 popover reactjs react-bootstrap

我无法理解 Popover 的定位方式。当我将它添加到我的按钮时,我希望它出现在按钮下方,但它出现在页面的左上角:

错位的弹出框

这是我的按钮组件的代码:

function HeaderLoginButton() {
  return (
    <div style={{ padding: "15px 0px" }}>
      <OverlayTrigger trigger="click" placement="bottom" overlay={ <Login id="headerLogin" /> }>
        <a className="login" style={ buttonStyle } onClick={ this.handleClick }>
          Log in / sign up
        </a>
      </OverlayTrigger>
    </div>
  )
}
Run Code Online (Sandbox Code Playgroud)

这是Login包装我的弹出窗口的组件的代码:

function Login( props ) {
  return (
    <Popover id={ props.id } title={ <LoginTitle /> }>
      <div className="form-group row">
        <input className="dontHaveAcctCheckbox" type="checkbox" />
        <label>I don't have an account, yet</label>
      </div>
      <div className="form-group row">
        <label className="col-sm-3 col-xs-3 control-label">Email: </label>
        <input type="email" className="email col-sm-8 col-xs-8" />
      </div>
      <div className="form-group row">
        <label className="col-sm-3 col-xs-3 control-label">Password: </label>
        <input type="password" className="password col-sm-8 col-xs-8" />
      </div>
      <button type="button" className="loginButton btn btn-default">
        Login
      </button>
      <button
        type="button"
        className="createAcctButton btn btn-default"
        style={{ display: "none" }}>
          Create Account
      </button>
    </Popover>
  )
}
Run Code Online (Sandbox Code Playgroud)

编辑:问题似乎是我将弹出窗口包装在Login组件中。如果我在 HeaderLoginComponent 中将其定义Popover为 a const,它似乎可以很好地定位自己。

有谁知道为什么会这样?

Eri*_*ric 1

我没有将道具传递到组件Popover内部Login。所以Popover没有得到placement,的值positionTop,并且positionLeft正在OverlayTrigger尝试发送它。

我能够使用 JSX spread 属性将所有 props 一起发送,如下所述:

https://facebook.github.io/react/docs/transferring-props.html