自定义 Hooks
📘 useSetState
useSetState 是一个增强版的 useState Hook,支持:
- 设置对象状态时自动进行合并(包括
深合并(示例5)和浅合并类比于this.setState) - 状态更新后支持回调函数(拿到更新后的值)
- 支持第三个参数可同步获取 设置后的最新值
✨ 导入方式
import { useSetState } from '@itera-web/hooks-setstate';
🧪 使用示例
1. 📚 简单对象合并
const [form, setForm] = useSetState({ name: '', age: 0 });
setForm({ name: '张三' });
// form = { name: '张三', age: 0 }
2. 📚 函数式更新 + 回调
setForm(
(prev) => ({ age: prev.age + 1 }),
(nextState) => {
console.log('加1后的年龄:', nextState.age);
},
);
3. 📚 非对象状态支持(如字符串)
const [text, setText] = useSetState('');
setText('Hello World');
// text = 'Hello World'
4. 📚 第三个参数获取实时最新值
const [textValue, setTextValue, getTextValue] = useSetState('');
setTextValue(123);
//能够同步获取到设置完毕的值
const currText = getTextValue();
5. 📚 对象深合并
const [state, setState, getState] = useSetState({
name: 'Alice',
age: 25,
address: { city: 'New York', zip: '10001' },
hobbies: ['reading'],
});
setState(
{ address: { city: 'Los Angeles' } },
(newState) => {
console.log('深合并后的状态:', newState);
},
true, // isDeep = true,触发深合并
);
🧩 类型定义
type SetStateAction<S> = S | ((prevState: S) => S);
type Dispatch<A> = (value: A, callback?: Function) => void;
📚 参数
| 参数名 | 类型 | 说明 |
|---|---|---|
initialState | T | 初始状态值 |
📚 返回值
| 变量名 | 类型 | 说明 |
|---|---|---|
state | T | 当前状态值 |
setState | (value: T | ((prev: T) => T), callback?: Function) => void | 更新状态并可选回调 |