Open ksntcrq opened 3 years ago
Unsure if this will help, but it feels like these two issues are kind of related?
Hey @ksntcrq, do you have a sandbox with this behaviour? Is it not happening when you use 6.9.0? Thanks!
looks like it's a duplicate of algolia/react-instantsearch#3018 indeed. Feel free to give more information on your problem there, and use 6.9.0 in the mean time
@Haroenv It does happen on 6.9.0, as well as 6.8.2. Could you please reopen?
I misunderstood the issue then, sorry!
https://github.com/algolia/react-instantsearch/pull/2953 sounds similar to the issue you're having
I've been trying to reproduce this the last couple of days, but always come short of touching the actual problem. Eg. I made https://codesandbox.io/s/charming-nash-cq896?file=/src/App.js, but there I always see searchResults being updated and a render using searching: false
.
To debug this properly, I'd love to see a sandbox that shows this behaviour
I'm not sure what causes the bug yet, but in the mean time, you could use connectHits and connectSearchBox instead of connectStateResults in your use case if you see the data not being correct.
I sent a working version in private to @mathougui, let me know if you need more details.
The component using searching
also uses query
and nbHits
from searchResults
, so I'm afraid I can't only use connectHits
and connectSearchBox
, but I'll try to find a workaround with this idea in mind. Thanks!
The issue seems to be introduced as soon as we're using connectHitInsights
. Because we have server-side rendering, we do it this way:
export default connectHitInsights(getAlgoliaAnalytics())(CustomHit);
export function getAlgoliaAnalytics() {
if (isServerSide()) {
return null;
}
if (isEmpty(window.aa)) {
return null;
}
return window.aa;
}
I managed to reproduce here. Just type two letters in the input, and see the outdated log in the console.
I simplified the example and found the following things that matter: https://codesandbox.io/s/stoic-hermann-98bx9?file=/pages/index.js
For your specific use case, can you try putting StateResults in front of Hits?
Changing the order seems to be working. Thanks!
Found some more things: https://codesandbox.io/s/billowing-browser-gd3kn?file=/src/App.js
Describe the bug 🐛
In some cases,
connectStateResults
does not provide the correct up-to-date values.To Reproduce 🔍
Unfortunately, it's not possible for me to give a working example here. But the flow is as follow:
connectStateResults
is not correctly updated,searching
remainstrue
- and, in our implementation, the spinner keeps spinning, on top of several other unwanted side-effects. The providedsearchResults
is also not correctly updated.Expected behavior 💭
connectStateResults
should always provide the latest values. There should not be a difference between the providedsearchResults.hits
and the hits provided byconnectHits
, for instance. Nor there should be a difference between the providedsearchState.query
andsearchResults.query
.Environment:
Additional context
We're using the latest
6.10.0
version of bothreact-instantsearch-core
andreact-instantsearch-dom
.We're using the following connectors:
connectSearchBox
. When submitting the search query, I'm calling the providedrefine
method with the query.connectHits
. The hits are always up to date, there is absolutely no issue there.connectStateResults
. Somehow, when using the React inspector, we can see that:searchState
is up to date. It contains the latest query.searching
sometimes remainstrue
until a new search query is fired.searchResults
sometimes contain the previous results until a new search query is fired. This also means thatsearchResults.query
contains the previous query, as opposed tosearchState.query
, where the up-to-date query can be found.We're also using server-side rendering, click analytics, and conversion analytics. Here is how the configure component looks like:
The search is performed on a single index, correctly passed to
InstantSearch
.