使用 React hooks 重置为初始状态
Reset to the initial State using React hooks
要将组件重置为初始状态:
- 将初始状态存储在变量中。
- 当事件发生时,调用该
setState()
函数,将初始状态传递给它。
应用程序.js
import {useState} from 'react'; const initialState = { name: '', country: '', salary: null, }; export default function App() { const [employee, setEmployee] = useState(initialState); const updateState = () => { setEmployee({name: 'Alice', country: 'Austria', salary: 100}); }; // 👇️ reset to initial state const resetState = () => { setEmployee(initialState); }; return ( <div> <button onClick={updateState}>Set state</button> <button onClick={resetState}>Reset to initial state</button> <h4>{JSON.stringify(employee, null, 4)}</h4> </div> ); }
useReducer
要使用钩子将组件重置为其初始状态:
- 将初始状态存储在变量中。
RESET
在你的减速器中处理一个动作类型。- 调度类型为 的操作
RESET
。
应用程序.js
import {useReducer} from 'react'; const initialState = 0; function reducer(state, action) { switch (action.type) { case 'INCREMENT': return state + 1; case 'RESET': return initialState; default: throw new Error(`Unhandled expression in switch: ${action.type}`); } } export default function App() { const [count, dispatch] = useReducer(reducer, initialState); const increment = () => { dispatch({ type: 'INCREMENT', }); }; // 👇️ reset to initial state const reset = () => { dispatch({ type: 'RESET', }); }; return ( <div> <button onClick={increment}>Increment</button> <button onClick={reset}>Reset</button> <h2>Count: {count}</h2> </div> ); }
无论我们是使用
useState hook 还是
useReducer来管理状态,我们都必须将初始状态存储在一个变量中以便重置它。
我们在组件外部声明了初始状态,以避免每次组件重新渲染时都重新声明它,但您可能不会看到任何明显的性能差异。
不幸的是,没有内置的方法可以让我们将组件的状态重置为其初始状态,因此我们必须将初始状态提取到一个变量中。
当您使用useState
钩子管理状态时,您所要做的就是调用您的
setState
函数并将初始状态传递给它。
应用程序.js
const resetState = () => { setEmployee(initialState); };
使用useReducer
钩子,您必须为RESET
返回初始状态的状态添加一个动作处理程序。
应用程序.js
function reducer(state, action) { switch (action.type) { case 'INCREMENT': return state + 1; // 👇️ reset to initial state case 'RESET': return initialState; default: throw new Error(`Unhandled expression in switch: `); } }
并发送一个类型为RESET
:
应用程序.js
const reset = () => { dispatch({ type: 'RESET', }); };