【问题标题】:Using react-form to POST to an API?使用 react-form POST 到 API?
【发布时间】:2018-03-29 17:15:55
【问题描述】:

可以在 here 找到 react-form 的文档。我在定位将 URL 的 POST 操作传递到库的位置和方式时遇到问题。我有一个 API 需要表单输入的值,但我似乎无法理解我实际上如何让组件 POST 到我指定的 API 端点。

这是我的表单组件:

import React, { Component } from 'react';
import { Form, Text, Select, Textarea } from 'react-form';

class DeploymentForm extends Component {
    render() {
        return (
            <Form
                onSubmit={(values) => {
                    console.log('Success!', values)
                }}
                validate={({ name }) => {
                    return {
                        name: !name ? 'A name is required' : undefined
                    }
                }}
            >
                {({submitForm}) => {
                    return (
                        <div>
                            New STB Deployment
                            <form onSubmit={submitForm}>
                                <Text field='placeholder' placeholder='username'/>
                                <Text field='placeholder' placeholder='show'/>
                                <Text field='placeholder' placeholder='Git URL'/>
                                <Text field='placeholder' placeholder='Git Reference'/>

                                <Select
                                    field='site'
                                    options={[{
                                    label: ''placeholder',
                                    values: true
                                    }]}
                                />
                                <Select
                                    field='Runway'
                                    options={[{
                                        label: 'Runway: stb',
                                        values: true
                                    }, {
                                        label: 'Runway: stb2',
                                        values: true
                                    }, {
                                        label: 'Runway: stb3',
                                        values: true
                                    }
                                    ]}
                                />
                                <Select
                                    field='Cluster: Default'
                                    options={[{
                                        label: 'placeholder',
                                        values: true
                                    }]}
                                />

                                <Text field='hash' placeholder='placeholder' />

                                <Textarea
                                    field='pre-deploy'
                                    placeholder='placeholder'

                                <Textarea
                                    field='post-deploy'
                                    placeholder='placeholder'
                                />

                                <Text field='placeholder' placeholder='placeholder'/>
                                <Text field='placeholder' placeholder='placeholder'/>

                                <button type='submit'>Submit</button>
                            </form>
                        </div>
                    )
                }}
            </Form>
        )
    }
}

export default DeploymentForm;

【问题讨论】:

    标签: javascript forms reactjs


    【解决方案1】:

    我很高兴使用 fetch-api 进行 http 请求。

    例子:

      var myInit = { method: 'POST',
                   headers: {}, 
    body: dataVar};
    
    fetch('http://API.com', myInit).then(function(response) {
      return response.json();
    }).then(function(jsonResponse) {
      //Success message
     console.log(jsonResponse);
    }).catch(error){
     console.log(error);
    });
    

    见参考:mozilla

    具有反应的魅力。不过,用 Promise 嵌套许多请求可能有点烦人。

    【讨论】:

      【解决方案2】:

      您的render() 方法看起来很复杂。尝试将逻辑保留在 render() 方法之外。发出帖子请求的更好方法如下所示:

      class DeploymentForm extends Component {
       constructor(props){
         super(props);
         this.state={'username': ''}
       }
       handleChange(e){
         this.setState({username: e.target.value});
       }
       handleSubmit(e){
          //call the api here with current state value (this.state.username)
       }
       render(){
        return(
         <form>
           <input onChange={this.handleChange.bind(this)} type="text" name="username" placeholder="Enter name here" />
           <button onClick={this.handleSubmit.bind(this)}>Submit</button>
         </form>
        )
       }
      }
      

      【讨论】:

      • 有趣。谢谢你给我关于我的混乱的建议。不过,出于好奇,我仍然没有将这些点与我实际将这些数据发布到 URL 端点的方式联系起来。举个例子会不会太麻烦?非常感谢您抽出宝贵时间,顺便说一句。
      • 在handleSubmit 中使用$.ajax POST 方法会更容易。或者你也可以考虑使用 axios(在 ES2017 之后总是使用 axios 和 async await)
      • 有趣。我将 Axios 用于 HTTP 请求,但从未用于 POST。所以基本上,React 不允许您指定表单操作/方法并以这种方式处理 POSTS?为什么需要我自己在事件处理程序中处理这些信息?
      • 表单提交本身就是一个事件。因此,处理它是我们的工作。 Axios 只是帮助您准确处理此类请求。
      猜你喜欢
      • 2015-09-19
      • 2021-08-07
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      相关资源
      最近更新 更多