加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 使用React Hook重置为初始状态

发布时间:2020-12-15 09:31:49 所属栏目:百科 来源:网络整理
导读:我目前正在处理一个注册表单,以下是我的代码片段: const Signup = () = { const [username,setUsername] = useState('') const [email,setEmail] = useState('') const [password,setPassword] = useState('') const [passwordConfirmation,setPasswordConf
我目前正在处理一个注册表单,以下是我的代码片段:

const Signup = () => {
    const [username,setUsername] = useState('')
    const [email,setEmail] = useState('')
    const [password,setPassword] = useState('')
    const [passwordConfirmation,setPasswordConfirmation] = useState('')

    const clearState = () => {
        setUsername('')
        setEmail('')
        setPassword('')
        setPasswordConfirmation('')
    }

    const handleSubmit = signupUser => e => {
        e.preventDefault()
        signupUser().then(data => {
            console.log(data)
            clearState() // <-----------
        })
    }

    return <JSX />
}

export default Signup

每个状态用于表单的受控输入.

基本上我想要做的是在用户成功注册后,我希望状态回到初始状态并清除字段.

非常必须手动将每个状态设置回空字符串inclearState我想知道是否有React附带的方法或函数将状态重置为初始值?

解决方法

遗憾的是,没有内置的方法将状态设置为初始值.

您的代码看起来不错,但是如果您想减少所需的功能,可以将整个表单状态放在单个状态变量对象中并重置为初始对象.

const { useState } = React;

function signupUser() {
  return new Promise(resolve => {
    setTimeout(resolve,1000);
  });
}

const initialState = {
  username: "",email: "",password: "",passwordConfirmation: ""
};

const Signup = () => {
  const [
    { username,email,password,passwordConfirmation },setState
  ] = useState(initialState);

  const clearState = () => {
    setState({ ...initialState });
  };

  const onChange = e => {
    const { name,value } = e.target;
    setState(prevState => ({ ...prevState,[name]: value }));
  };

  const handleSubmit = e => {
    e.preventDefault();
    signupUser().then(clearState);
  };

  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label>
          Username:
          <input value={username} name="username" onChange={onChange} />
        </label>
      </div>
      <div>
        <label>
          Email:
          <input value={email} name="email" onChange={onChange} />
        </label>
      </div>
      <div>
        <label>
          Password:
          <input
            value={password}
            name="password"
            type="password"
            onChange={onChange}
          />
        </label>
      </div>
      <div>
        <label>
          Confirm Password:
          <input
            value={passwordConfirmation}
            name="passwordConfirmation"
            type="password"
            onChange={onChange}
          />
        </label>
      </div>
      <button>Submit</button>
    </form>
  );
};

ReactDOM.render(<Signup />,document.getElementById("root"));
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<div id="root"></div>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读