javascript - 提交后如何在handleSubmit方法中重新加载页面/路由器?

标签 javascript reactjs

我有一个带有登录表单的组件。

我需要做的是让它在用户单击提交按钮后重新加载页面/路由。

这样做的原因是,单击提交按钮后,需要对导航组件进行一些更改,而导航组件不是这个。

您可以看到我使用了 sessionStorage.setItem('something', 'somevalue');,然后导航组件会读取它并进行一些更改。

目前要查看更改,我需要重新加载浏览器。

这是代码:

class Login extends Component {
  constructor(props) {
    super(props);
    this.state = {
      username: '',
      password: '',
    };

    this.onUsernameChange = this.onUsernameChange.bind(this);
    this.onPasswordChange = this.onPasswordChange.bind(this);
  }

  onUsernameChange(event) {
    this.setState({ username: event.target.value });
  }

  onPasswordChange(event) {
    this.setState({ password: event.target.value });
  }

  handleSubmit() { 
    event.preventDefault();
    sessionStorage.setItem('something', 'somevalue');
    // reload the page here or re-router to current page/router

  }

  render() {

    return (
        <div>
          <form className="form-signin" onSubmit={this.handleSubmit}>
            <input type="text" value={this.username} onChange={this.onUsernameChange} />
            <input type="password" value={this.password} onChange={this.onPasswordChange} />
            <input type="submit" value="Submit" />
          </form>
        </div>
    );
  }
}

export default Login;

如何解决这个问题?

最佳答案

一个好主意是在路由中使用 onEnter 回调或订阅 sessionStore 上的更改(这是一个 redux 存储吗?)检查更新,并允许该信息通过应用程序向下传播。

但是,要回答有关导航的问题,您可以使用以下任一方法:

location.reload() - location 是标准 JavaScript(浏览器)对象

或使用提供的 withRouter 组件增强器注入(inject) React Router 的 router

import { withRouter } from 'react-router'

...

export default withRouter(Login);

router 将在 props 中可用 - 您可以像这样使用它

const { router } = this.props
router.push('/some/route')

这将触发 View 更改而无需重新加载窗口(这就是为什么我建议确保您可以在不重新加载页面的情况下更新组件关于 session 的知识)

编辑 - 顺便说一句,eventhandleSubmit中未定义

关于javascript - 提交后如何在handleSubmit方法中重新加载页面/路由器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834953/

相关文章:

javascript - 尝试根据今天的第一个 JS 元素显示隐藏的 div

php - 在没有明显重新加载的情况下更新 URL

javascript - 从快速服务器传递变量以 react 应用程序

javascript - Three.js - 在运行时更改 JSON Material

javascript - 如何用react js实现切换效果?

javascript - 即使 API 获得新参数,React setState 也不会更新

javascript - 将 ngInit 添加到具有指定 css 类的所有元素

html - Bootstrap 导航栏一些元素居中,其他元素在右边

reactjs - React router 卸载功能组件

javascript - 如果在事件处理程序之前或之间有等待调用,React 不会在事件处理程序中批处理 setState 调用