Undo and redo with a reducer in React
React interview exercise on Context & reducers, difficulty 3 of 3. Solve it in the editor beside a worked example; the tests run the moment you do.
Write useUndo(initial) returning { value, set, undo, redo, canUndo, canRedo }, backed by a reducer over { past, present, future }: set replaces the present and clears the future; undo and redo move one step and do nothing at the ends.
Each exercise pairs a worked example with a twin problem to solve in a real editor; the tests run the moment you do. Progress is saved in your browser, and in your account if you sign in.