【问题标题】:add multiple input lines and add it to fetch method with reactJS添加多个输入行并将其添加到使用 reactJS 的 fetch 方法中
【发布时间】:2019-12-24 21:58:57
【问题描述】:

我想通过单击按钮添加一些输入行并将其添加到状态,以便我可以将其发送到服务器,但我不确定如何将其添加到 fetch 方法,或者即使它已添加到状态,

这是我目前所拥有的:

export class AdminPage extends React.Component {
    constructor(props){
        super(props);
        this.state = { 
          sendeEmail: '',
          matrialeliste: [{
          matrialer: '',
          antal: '',
          pris: ''}]
        };
      }
      handleUserInput = (e) => {
        if (["matrialer", "antal", "pris"].includes(e.target.className) ) {
          let matrialeliste = [...this.state.matrialeliste]
          //matrialeliste[e.target.dataset.id][e.target.className] = e.target.value
          this.setState({ matrialeliste }, () => console.log(this.state.matrialeliste))
        } else {
          const name = e.target.name;
          const value = e.target.value;
          this.setState({[name]: value};
        }
      }
      addMatrialeliste = (e) => {
        this.setState((prevState) => ({
          matrialeliste: [...prevState.matrialeliste, {matrialer:"", antal:"", pris:""}],
        }));
      }
      onSubmitSignIn = (event) => {
        event.preventDefault();

            fetch(`${api.url}/form`, {
                method: 'post',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({
                    sendeEmail: this.state.sendeEmail,          
                })
            })
            .then((response) => (response.json()))
            .catch(error => console.log(error));
    }

      render(){
        let {matrialeliste} = this.state;
          return(

            <div>
              <div>
                <h1>Arbejds seddel</h1>
                <form>

                    <div>
                      <button type="button" onClick={this.addMatrialeliste}>
                            tilføj materialer
                          </button>
                    {
                      matrialeliste.map((val, idx) => {

                        return(
                      <div key={idx}>
                      <div>
                        <label htmlFor="matrialer">
                            Matrialeliste
                          </label>
                          <input name='matrialer' type="text" className='matrialer' onChange={this.handleUserInput} />
                      </div>

                      <div>
                        <label htmlFor="antal">
                            Antal
                          </label>
                          <input name='antal' type="number" className='antal' onChange={this.handleUserInput} />
                      </div>

                      <div>
                        <label htmlFor="pris">
                            Pris
                          </label>
                          <input name='pris' type="number" className='pris' onChange={this.handleUserInput} />
                      </div>

                    </div>)})}
                    <label htmlFor="email">
                            E-mail
                          </label>
                    <input name='email' type="email" onChange={e => this.handleUserInput} />
                      <button type="submit">Send som E-mail</button>

                  <div>
                   <button type="submit" disabled=this.state.formValid}>Create</button>
                  </div>
                  </div>
                </form>
              </div>
          </div>
          );
      }
}

我可以添加额外的行,但我不知道如何将其添加到 fetch 方法中。

我想我可以映射它,但我仍然不确定如何做到这一点

【问题讨论】:

  • 输入行是什么意思?有具体的例子吗?
  • 类似于
  • 你想将整个状态传递给 fetch 方法还是只传递sendeEmail

标签: javascript reactjs input


【解决方案1】:

使用简单的 React 创建表单需要您编写流程的每个部分,对于复杂的状态,它变得很困难。所以,我个人的意见是使用 FormikReact Hook Form,因为它们涵盖了大部分功能。
在你的情况下,我假设你想发送整个状态来获取方法。这里是你的代码的example,它是用 Formik 库实现的。

【讨论】:

  • 好的,我可以在列表中添加更多行,但是当我发送它时,我得到一个 500(内部服务器错误)并且服务器与邮递员一起工作
  • 内部服务器错误来自后端 api,请检查您的 API 或将这里作为问题提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多