joinmarket-webui / joinmarket-webui/jam

v2: avoid state updates during render in session/wallet providers (StrictMode warning + rerender risk)

Open
#1,236 0 comments 0 reactions 1 assignee Claimed by @parrth20 View on GitHub
Dominant language
TypeScript
Stars
330
Forks
122
Avg merge
2d 17h
Merged PRs (30d)
17

Description

### Summary
In v2, there are render-phase state updates in core app flow. This can cause React warnings and unstable rerender behavior (especially in StrictMode/dev), and may contribute to hard-to-debug UI state issues during rescan/wallet refresh transitions.

### Current behavior
State is updated directly inside component render paths instead of in `useEffect`:

- `src/context/JamSessionInfoContextProvider.tsx` around the `shouldUpdateRescanInfo` check:
- `setRescanInfo(...)` is called during render when query data updates.
- `src/App.tsx` in `WalletInfoAutoReload`:
- `setPreviousRescanning(...)` and `setRescanningFinished(...)` are called in render when rescan status changes.

### Why this matters
Calling state setters during render can lead to:
- extra/unpredictable rerenders
- React warnings (`Cannot update a component while rendering...`)
- potential update-loop edge cases in transition-heavy flows (rescan start/finish, wallet info refresh)

### Expected behavior
All state transitions should be done in effects (`useEffect`) or derived values, not during render.

### Suggested fix
1. Move `setRescanInfo(...)` logic in `JamSessionInfoContextProvider` into a `useEffect` with proper guards for stale query data.
2. Move rescan transition handling in `WalletInfoAutoReload` into `useEffect` (or derive `rescanningFinished` safely from previous/current values).
3. Keep existing stale-data protection behavior.
4. Add unit tests for transitions:
- `rescanning: true -> false`
- stale query data should not overwrite newer local state.

### Repro hints
- Run app in dev (React StrictMode enabled).
- Trigger rescan flow and observe console warnings/rerender patterns around session/wallet refresh.

### Environment
- Repo: `joinmarket-webui/jam`
- Branch: `devel`
- Date observed: May 1, 2026

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.