// Author: fruit.com.cn import { useCallback, useRef, useState } from 'react'; /** 统一写操作 hook:暴露 pending / error,run 失败会抛错由调用方决定提示方式。 */ export function useMutation(mutator) { const [state, setState] = useState({ pending: false, error: null }); const mutatorRef = useRef(mutator); mutatorRef.current = mutator; const run = useCallback(async (...args) => { setState({ pending: true, error: null }); try { const data = await mutatorRef.current(...args); setState({ pending: false, error: null }); return data; } catch (error) { setState({ pending: false, error }); throw error; } }, []); return { ...state, run }; }