等待点击直到元素被渲染

亚历克斯·艾恩赛德

情况如下: 我有一个Navigation, 和Login组件。Login只是一个导出的函数,它让用户登录。它是这样的:

export function login() {
    var email = document.getElementById('email').value;
    var password = document.getElementById('password').value;
    firebase
        .auth()
        .signInWithEmailAndPassword(email, password)
        .then(() => {
                document.getElementById('close').click();
                document.getElementById('questions').click();
            }
        ).catch(e => console.log(e));
}

这几乎完美无缺。

这是我的Navigation组件

render() {
    return (
        <BrowserRouter>
            <React.Fragment>
                <Navbar>
                    <Navbar.Header>
                        <Navbar.Brand>
                            <Link id='home' to="/">UczIchApp</Link>
                        </Navbar.Brand>
                    </Navbar.Header>
                    <Nav>
                        <LinkContainer id='about' to='/about'>
                            <NavItem>O nas</NavItem>
                        </LinkContainer>
                        {// The issue starts here
                            this.state.user ?
                                <React.Fragment>
                                    <LinkContainer id="questions" to='/questions'>
                                        <NavItem>Zadania</NavItem>
                                    </LinkContainer>
                                    <NavItem onClick={logout.bind(this)}>Wyloguj się</NavItem>
                                </React.Fragment>
                                :
                                <NavItem onClick={this.openLogin}>Zaloguj się</NavItem>
                        }
                    </Nav>
                </Navbar>
                <Switch>
                    <Route exact path="/about" component={AboutComponent}/>
                    <Route exact path="/questions" component={QuestionsComponent}/>
                    <Route exact path="/" component={HomeComponent}/>
                    <Route path='/question/:id' component={QuestionComponent}/>
                </Switch>
                <ModalComponent show={this.state.show} changeShowState={this.changeShowState}/>
            </React.Fragment>
        </BrowserRouter>
    )
}

所以当我登录用户时,我希望他被转移到Questions路由中。我正在尝试通过点击来做到这一点。但问题是,Questions链接尚未呈现,所以我收到:TypeError: "document.getElementById(...) is null"错误。

我怎样才能让它等到组件被渲染?

气候

您可以以编程方式重定向用户有几种方法可以做到这一点,例如:

如果您的Login组件扩展,React.Component您可以访问history像这样的对象:

class Login extends React.Component {
   // use `this.props.history.push('/some/path')` here
};

因此,您可以在登录时传递this.props.history给您的login函数并调用push

export function login(history) {
    var email = document.getElementById('email').value;
    var password = document.getElementById('password').value;
    firebase
        .auth()
        .signInWithEmailAndPassword(email, password)
        .then(() => {
                history.push('/questions');
            }
        ).catch(e => console.log(e));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

等待渲染图表,直到数据加载完毕

来自分类Dev

React Native - Firestore 等待渲染直到查询结束

来自分类Dev

硒等待元素可点击python

来自分类Dev

jQuery在渲染元素后停止监听点击

来自分类Dev

硒等待,直到存在或按元素显示元素

来自分类Dev

如何等待直到硒中不再存在元素

来自分类Dev

如何在量角器中等待直到启用元素

来自分类Dev

如何等待直到水豚中的某个元素消失?

来自分类Dev

等待直到下拉列表元素在CasperJS中可见

来自分类Dev

如何在量角器中等待直到启用元素

来自分类Dev

如何等待渲染组件,直到在Angular 2中收集了所有数据

来自分类Dev

等待直到功能被触发

来自分类Dev

等待直到AlertDialog显示

来自分类Dev

在点击myFunction并等待完成

来自分类Dev

等待点击循环

来自分类Dev

等待按钮被点击

来自分类Dev

“元素在某个时刻不可点击”,因为它上面有东西-我如何等待它被点击?

来自分类Dev

点击事件渲染视图

来自分类Dev

等待 forkjoin 渲染 html

来自分类Dev

暂停javascript直到下次点击?

来自分类Dev

等待直到NSURLConnection sendAsynchronousRequest完成

来自分类Dev

等待直到收到用户对象

来自分类Dev

等待直到从站已同步

来自分类Dev

等待IAsyncResult函数直到完成

来自分类Dev

等待直到收到用户对象

来自分类Dev

Ajax调用等待直到加载

来自分类Dev

等待线程直到文件修改

来自分类Dev

Polymer,如何在渲染其他元素之前等待core-ajax完成?

来自分类Dev

Polymer,如何在渲染其他元素之前等待core-ajax完成?