当前位置: 首页 > 面试题库 >

使用React Hooks重置为初始状态

万俟宜修
2023-03-14
问题内容

我目前正在使用注册表单,以下是我的代码段:

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

每个状态都用于表格的受控输入。

本质上,我想做的是在用户成功注册后,希望状态恢复为初始状态,并清除字段。

手动将每个状态设置为空字符串是非常必要的,clearState因为我想知道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>


 类似资料:
  • 我目前正在处理一个注册表单,以下是我的代码片段: 每个状态都用于表单的受控输入。 基本上,我想做的是在用户成功注册后,我希望状态返回到初始状态,并清除字段。 在中手动将每个状态设置回空字符串是非常必要的。我想知道React是否有一个方法或函数可以将状态重置回初始值?

  • 2)有没有另一种方法可以重写这个逻辑而不使用道具来设置状态? 父组件: 子组件

  • 我正在使用React-useState创建状态为的对象。在成功调用API后,将更新为数据对象。 我有一个表单可以更改此状态,但我还有一个取消按钮。单击“取消”时,如何将此状态恢复为其初始值(API调用后)? 我应该创建另一个状态变量和存储初始状态在那里,然后更新我的状态基于?

  • 我有一个受控输入,它接受名为的道具。该对象由其父组件传递给它,并在其中用观察者1异步初始化。 在父组件中: 我想用填充受控输入的初始状态。类似下面的内容,这不应该是反模式,因为状态只依赖于构造上的prop。 当我刷新受控输入时,出现以下问题: 的值为,因为观察者尚未触发。组件被构造并将分配给. 观察者激发,为用户分配一个复杂的对象,React重新呈现组件。这不会更改组件的状态,仍然是。 我被困在如

  • 本文向大家介绍Redux怎样设置初始状态?相关面试题,主要包含被问及Redux怎样设置初始状态?时的应答技巧和注意事项,需要的朋友参考一下 它必须是createStore的第二个参数: const rootReducer = combineReducers({ todos: todos, visibilityFilter: visibilityFilter }); const initialSta

  • 问题内容: 我试图弄清楚如何为redux中的商店设置初始状态。我以https://github.com/reactjs/redux/blob/master/examples/todos- with- undo/reducers/index.js 为例。我试图修改代码,以便待办事项已初始化一个值。 按照文档操作:http : //redux.js.org/docs/api/createStore.h