Skip to main content

Debugging

React Tracked uses native React state and context, and the debugging method is basically the same as pure React.

React DevTools

React officially provides its DevTools [1] [2].

Basically, you can use the tool just like a pure React app. One note with React Tracked is that a state object stays in the Provider component.

For example, if you create a container like this,

const useValue = () => useReducer(reducer, initialState);
export const { Provider, useTracked } = createContainer(useValue);

your state will be in Provider / Value / Reducer.

screenshot 1

useTrackedState (AffectedDebugValue)

The very specific usage of the DevTools is for useTrackedState. In the development mode, the tracked path list of a state can be investigated with AffectedDebugValue.

Find it under TrackedState / TrackedState / AffectedDebugValue / DebugValue.

screenshot 2

useSelector

If you are using useSelector, you can use useDebugValue on your end. For example, the following is to show a selected value in the DevTools.

const selectPerson = state => state.person;
const Person = () => {
const person = useSelector(selectPerson);
useDebugValue(person);
...
};

Naive logging

If you prefer console.log style debugging, here's a recipe for that.

const reducer = ...;
const initialState = ...;

const useValue = () => {
const [state, dispatch] = useReducer(reducer, null, init);
useEffect(() => {
console.log('state', state);
}, [state]);
const dispatchWithLogging = useCallback((action) => {
console.log('action', action);
dispatch(action);
}, []);
return [state, dispatchWithLogging];
};

const {
Provider,
useTracked,
// ...
} = createContainer(useValue);

const App = () => (
<Provider>
...
</Provider>
);