默认页面重新加载后不执行事件代码



在onSubmit表单事件上,我想使用PUT或POST方法将一些数据发送到服务器,然后刷新页面,但是页面重新加载而不执行其余的事件代码。添加行event.preventDefault()可解决此问题,但会阻止重新加载。我错过了什么?

事件代码:

handleFormSubmit = (event, requestType, articleID) => {
        const title = event.target.elements.title.value;
        const content = event.target.elements.content.value;
        switch ( requestType ) {
            case 'post':
                return axios.post('http://127.0.0.1:8000/api/', {
                    title: title,
                    content: content
                })
                .then(res => console.log(res))
                .catch(error => console.err(error));
            case 'put':
                return axios.put(`http://127.0.0.1:8000  /api/${articleID}/`, {
                    title: title,
                    content: content
                })
                .then(res => console.log(res))
                .catch(error => console.err(error));
        }
    }

表单代码:

 <Form onSubmit={(event) => this.handleFormSubmit(
                event,
                this.props.requestType,
                this.props.articleID )}>
            <FormItem label="Title" >
                <Input name="title" placeholder="Put a title here" />
            </FormItem>
            <FormItem label="Content" >
                <Input name="content" placeholder="Enter some content ..." />
            </FormItem>
            <FormItem>
                <Button type="primary" htmlType="submit">{this.props.btnText}</Button>
            </FormItem>
            </Form>
您需要在

表单成功提交后以编程方式重新加载页面,或者在没有响应或任何服务器错误时显示错误消息:

class App extends React.Component {
  handleSubmit = e => {
    e.preventDefault();
    return axios
      .post("https://reqres.in/api/login", {
        email: "title",
        password: "content"
      })
      .then(res => {
        alert(res.data.token);
        location.reload();
      })
      .catch(error => console.log(error));
  };
  render() {
    return (
      <div className="App">
        <form onSubmit={this.handleSubmit}>
          <input type="text" placeholder="Email" />
          <input type="password" placeholder="Password" />
          <button type="submit">Submit</button>
        </form>
      </div>
    );
  }
}

这是一个演示:https://codesandbox.io/s/j7j00nq705

您可以使用event.preventDefault() .但是,您应该使用react-routerhistory.push()在请求完成后手动加载另一个组件。

  case 'post':
             return axios.post('http://127.0.0.1:8000/api/', {
                    title: title,
                    content: content
             })
             .then(res => {
                  console.log(res);
                  // using "history.push()" to load another component
                  this.props.history.push('/somePage')
                  })
             .catch(error => console.err(error));

您的上述Form组件必须使用 react-router 进行路由Form或者该组件必须位于使用 react-router 路由Component中。

相关内容

  • 没有找到相关文章

最新更新