【问题标题】:Trying to have multiple input elements尝试有多个输入元素
【发布时间】:2020-09-18 22:43:58
【问题描述】:

但是当我使用句柄输入更改功能时,它会擦除​​整个对象并用一个属性替换它

如果有人可以帮我重置表单数据?因为我将状态设置为初始状态值,但文本字段并未擦除。

const initialState = {
  name: '',
  number: '',
  message: '',
  email: '',
  messageSent: false,
};

//State After typingState
{email: "2"}

我使用的是基于类的组件,它工作正常我切换了,现在我在提交时得到一个属性而不是 4 我希望句柄更改以更改特定属性而不是整个对象 暂时离开了反应,不知道该修复什么谷歌。试过了 处理多个输入功能组件 React 等。

 let handleInputChange = (event) => {
    const target = event.target;
    const value = target.value;
    const name = target.name;

    setstate({
      [name]: value,
    });
  }
    return (
      <section
        id="contact-form"
        className={
         GrayBg === true
            ? 'contact-form-area_3'
            : 'contact-form-area_3  contact-page-version'
        }
      >
        <div className="container">
          <div className="section-title mb45 headline text-center">
            <span className="subtitle text-uppercase">Send us a message</span>
            <h2>
              Send Us A<span> Message.</span>
            </h2>
          </div>

          <div className="contact_third_form">
            <form
              className="contact_form"
              encType="multipart/form-data"
              onSubmit={ sendEmail}
            >
              <div className="row">
                <div className="col-md-4">
                  <div className="contact-info">
                    <input
                      className="name"
                      name="name"
                      type="text"
                      value={state.value}
                      onChange={handleInputChange}
                      placeholder="Your Name."
                    />
                  </div>
                </div>
                <div className="col-md-4">
                  <div className="contact-info">
                    <input
                      className="email"
                      name="email"
                      type="email"
                      value={state.value}
                      onChange={handleInputChange}
                      placeholder="Your Email"
                    />
                  </div>
                </div>
                <div className="col-md-4">
                  <div className="contact-info">
                    <input
                      className="number"
                      name="number"
                      type="number"
                      value={state.value}
                      onChange={handleInputChange}
                      placeholder="Phone Number"
                    />
                  </div>
                </div>
              </div>
              <textarea
                name="message"
                placeholder="Message."
                value={state.value}
                onChange={handleInputChange}
              ></textarea>
              <div className="nws-button text-center  gradient-bg text-uppercase">
                <button id="contact-button" type="submit">
                  {state.messageSent ? 'Sent!' : 'Send'}{' '}
                  <i
                    className={
                      state.messageSent
                        ? 'fas fa-check'
                        : 'fas fa-caret-right'
                    }
                  ></i>
                </button>
              </div>
            </form>
          </div>
        </div>

【问题讨论】:

    标签: reactjs react-hooks state react-functional-component


    【解决方案1】:

    状态更新不与钩子合并与类组件不同,您需要自己这样做。

    使用 setState 的函数方法并通过在返回的对象中传播其余值来更新您的状态,例如

    setstate(prev => ({
      ...prev,
      [name]: value,
    }));
    

    【讨论】:

    • 非常感谢!我不知道去哪里找这个。还有一个问题,我是否以同样的方式清除字段?因为状态正在改变,但文本没有清除。
    • 是的,您需要将整个更新后的对象提供给 setstate
    • setstate({ name: '', number: '', message: '', email: '', messageSent: false, })
    • 那是因为目前没有输入被控制。他们应该使用 value={state.number} 等值。
    • 很高兴能帮上忙 :-)
    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 2021-04-07
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多