无法在React中覆盖组件

时间:2019-12-26 00:15:09

标签: javascript css reactjs

我有以下模态成分:

export default function LoginModal(props) {
    const { showLogin, hideLogin } = props
    if (!showLogin) return null
    return (
        <div class='overlay'>
            <div class='modal'>
                <article class='mw5 center bg-white br3 pa3 pa4-ns mv3 ba b--black-10'>
                    <div class='tc'>
                        <h1 class='f4'>Firstname Lastname</h1>
                        <hr class='mw3 bb bw1 b--black-10' />
                    </div>
                    <p class='lh-copy measure center f6 black-70'>
                        test test test test
                    </p>
                </article>
            </div>
        </div>
    )
}
我正在尝试使用存储在我的redux存储中的state属性有条件地渲染的

。但是,当我将其放置如下时:

<article class='pv6 center ph3 ph5-ns tc br2 bg-washed-green dark-green mb5'>
    PAGE CONTENT HERE           
</article>
<LoginModal />

它出现在屏幕其余内容的下方,而不是我希望的所有其他内容的上方。我正在使用以下CSS尝试获得这种效果,但它似乎不起作用:

.overlay {
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: 'rgba(0,0,0,0.3)';
    padding: 50;
    z-index: 300;
}

.modal {
    background-color: '#fff';
    border-radius: 5;
    max-width: 500;
    min-height: 300;
    margin: '0 auto';
    padding: 30;
}

我需要模式作为登录卡出现在屏幕中央,背景变暗,这在许多网站上都很常见。我也宁愿不使用UI组件库来实现。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为您缺少<form action="{{ route('accounts.update', $user->id) }}" method="post"> @csrf @method('PUT') <div class="form-group row"> <label for="balance" class="col-md-4 col-form-label text-md-right">{{ __('Enter Client\'s Balance :') }}</label> <div class="col-md-6"> <input id="balance" type="text" class="form-control @error('balance') is-invalid @enderror" name="balance" value="" autocomplete="balance" autofocus> </div> </div> <div class="form-group row"> <label for="amount" class="col-md-4 col-form-label text-md-right">{{ __('Enter Client\'s Amount:') }}</label> <div class="col-md-6"> <input id="amount" type="text" class="form-control @error('amt') is-invalid @enderror" name="amt" value=" " required autocomplete="amt" autofocus> </div> </div> <!-- /.card-body --> <div class="card-footer text-center"> <button type="submit" class="btn btn-primary">Update Account</button> </div> </form>风格的position: fixed

此外,您可能要考虑使用Portals在您的应用程序的DOM层次结构之外(即,在我们通常使用的.overlay<div id="app"></div>之外)呈现模式。

为此,您的<div id="root"></div>或等效文件将具有以下内容:

index.html

然后您需要像这样更新<div id="app"></div> <div id="modal"></div>

LoginModal

请注意,如果您尝试重用此示例中的代码来创建通用的export default function LoginModal(props) { const { showLogin, hideLogin } = props; if (!showLogin) return null; return ReactDOM.createPortal(( <div class='overlay'> <div class='modal'> <article class='mw5 center bg-white br3 pa3 pa4-ns mv3 ba b--black-10'> <div class='tc'> <h1 class='f4'>Firstname Lastname</h1> <hr class='mw3 bb bw1 b--black-10' /> </div> <p class='lh-copy measure center f6 black-70'> test test test test </p> </article> </div> </div> ), document.getElementById('modal')); } 组件,则一次只能显示一个组件,因为它们将在同一{{1}内呈现}元素。

Portals documentation中,您可以看到一个示例,该示例动态创建一个新元素,以便您可以同时具有多个模态。