Do you think an application which directly calls the service from the different locations is as equally coupled as an application where all those code locations call a single function which then is the only place where the front end application makes the request to the service? Do you think the effort involved to change to a new service would be the same in both cases? And do you think the effort involved to change the service would change at the same rate in both cases if the number of callers were 10x or 100x than they were before?
Assuming you do agree with me that the 2nd option, with an intermediary function, would require less effort and less change in effort it’s quite clearly less coupled.
That’s an illustration of how inserting an intermediary B (the function in this example) can still lead to lower coupling even if the number of calls between A and C are unchanged.
What you’re describing is more like an API gateway.
A is your React app, C is your Java service, and B is the hypothetical bff that might be inserted between.
Decoupling is not disconnection.
If B is (well-)implemented, your React app and Java service do not know about each other.