Javascript 是否有一个React hooks特性,其功能与将回调作为第二个参数传递给setState相同?
使用钩子,我希望只在特定的更新状态调用之后执行函数。例如,我希望实现与此相同的功能(假设我已经实例化了这段状态) 我不希望每次名称更改时都记录“hi”,我只想在执行了这个特定的setState调用后记录“hi” 这个 不适用于我的目的,因为我不希望每次名称更改时都记录“hi”。setName调用中的值并不重要。只有在执行此特定的setName调用后,才能执行console.log 更新:我想得太多了。我问这个问题是因为我有一个叫做“mode”的状态,它通过switch语句确定了一些条件呈现:Javascript 是否有一个React hooks特性,其功能与将回调作为第二个参数传递给setState相同?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,使用钩子,我希望只在特定的更新状态调用之后执行函数。例如,我希望实现与此相同的功能(假设我已经实例化了这段状态) 我不希望每次名称更改时都记录“hi”,我只想在执行了这个特定的setState调用后记录“hi” 这个 不适用于我的目的,因为我不希望每次名称更改时都记录“hi”。setName调用中的值并不重要。只有在执行此特定的setName调用后,才能执行console.log 更新:我想得太多了。我问这个问题是因为我有一个叫做“mode”的状态,它通过switch语句确定了一些条件呈现: s
switch(mode) {
case foo: return <Foo />
case bar: return <Bar />
}
为了只在组件渲染时触发此逻辑。来自useState()和useReducer()挂钩的状态更新不支持第二个回调参数。要在渲染后执行副作用,请使用useffect()在组件体中声明它。只需在此处进行Spitball
const useStateWithCallback = val => {
const callback = useRef();
const [state,setState] = useState(val);
useEffect(() => {
callback.current && callback.current(state);
callback.current = null;
},[callback,state]);
return [
state,
useCallback((arg,cb) => {
callback.current = cb;
return setState(arg);
},[callback,setState])) // these are safe to omit, right?
]
}
编辑:不要太冗长,但用法:
import { useStateWithCallback } from './useStateWithCallback';
const MyCmp = () => {
const [name,setName] = useStateWithCallback('');
...
setName('joe',state => console.log(`Hi ${state}`));
...
}
React.useEffect(() => {
someLogic();
}, []);
const useStateWithCallback = val => {
const callback = useRef();
const [state,setState] = useState(val);
useEffect(() => {
callback.current && callback.current(state);
callback.current = null;
},[callback,state]);
return [
state,
useCallback((arg,cb) => {
callback.current = cb;
return setState(arg);
},[callback,setState])) // these are safe to omit, right?
]
}
import { useStateWithCallback } from './useStateWithCallback';
const MyCmp = () => {
const [name,setName] = useStateWithCallback('');
...
setName('joe',state => console.log(`Hi ${state}`));
...
}