面试题答案
一键面试正确初始化状态
在React中使用useReducer
Hook时,初始化状态通过useReducer
的第二个参数来实现。如果只传递一个值,这个值就是初始状态。如果传递一个函数,React会在首次渲染时调用这个函数,将其返回值作为初始状态。这样做的好处是可以在初始化状态时执行一些计算逻辑,而不会在每次渲染时都执行这些计算。
计数器场景代码示例
import React, { useReducer } from 'react';
// reducer函数
const counterReducer = (state, action) => {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
default:
return state;
}
};
const Counter = () => {
// 初始化状态
const initialState = { count: 0 };
const [state, dispatch] = useReducer(counterReducer, initialState);
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
<button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
</div>
);
};
export default Counter;
在上述代码中:
counterReducer
是reducer函数,它根据接收到的action
来更新状态。initialState
是初始状态对象,这里计数器初始值为0。useReducer
Hook接收counterReducer
和initialState
,返回当前状态state
和用于派发action
的dispatch
函数。- 两个按钮分别通过
dispatch
触发increment
和decrement
动作,从而更新计数器的值。