Comments (8)
You can't call hooks inside useEffect
: https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level
Instead you can do this:
function App () {
const [mounted, setMounted] = useState(false)
const { data } = useSWR(mounted ? '/api/data' : null, fetchData)
useEffect(() => {
setMounted(true)
}, [])
}
When key
is null
, SWR will pause itself. It's also explained here https://github.com/zeit/swr#key-as-a-function.
from swr.
@corysimmons you can just remove that useEffect
:
const [selectOption, setSelectOption] = useState()
useSWR(`https://api.example.com/${selectOption}`)
return (
<select>...</select>
)
from swr.
@shuding My fetched URL changes depending on some <select>
. How does SWR handle that without useEffect?
That is... how can I accomplish something like below if I can't nest useSWR
?
const [selectOption, setSelectOption] = useState()
useEffect(() => {
useSWR(`https://api.example.com/${selectOption}`) // π¨ can't nest hooks
}, [selectOption])
return (
<select>...</select>
)
from swr.
@moroshko nope, SWR isn't like the normal fetch
call. It will reuse the result, and only fetch again in certain cases by default (for example if you refocus on the window).
from swr.
RevalidateOnFocus make SWR run a new fetch every time the tab recover focus, when you focus on the browser DevTools the tab lose focus, when you click again in the page it will recover the focus and revalidate the data triggering a new request.
from swr.
@shuding Awesome. btw I like your Github quote and domain name. Thanks for the nice library!
from swr.
@quietshu Maybe I'm missing the intent here, but wouldn't fetch happen on every rerender this way? (since mounted
is going to be always true
)
from swr.
I'm having this same issue. I'm using the setMounted technique shown above. However, I still see network requests to my SWR endpoint when I change another property on the component and render gets called. Maybe SWR always makes the call in DEV mode?
If I add revalidateOnFocus: false to the SWR request then it seems to work. I'm testing this in Chrome developer tools. I wonder if it's doing something funky.
from swr.
Related Issues (20)
- [TS Error] Did you forget to use 'await'? HOT 4
- If the request is canceled, it won't happen again, [ signal abortController]
- Introducing SWRConfig causes re-rendering HOT 1
- mutate() never calls onSuccess nor onError HOT 1
- Wrong key serialization HOT 5
- React Hook Order Error with Multiple useSWR Hooks in Next.js with Suspense HOT 2
- useSWRInfinite with types
- Revalidate useSWR by considering only the first argument when using multiple arguments. HOT 1
- focusThrottleInterval is not honoured for the first refresh on focus after mount HOT 3
- auto retry has timer issues with mutate
- `useSWR` in UI KIT library not using cache from consumer app HOT 7
- isLoading always typed as false when using fallbackData
- useSWR not making the fetch request
- useSWR deduped by mistake after cache clear HOT 1
- useSWRInfinite continually fetches the first page (no caching observed) HOT 3
- Type mismatch on SWR Configuration
- Got "None of the selected packages has a "watch" script" when pnpm watch run HOT 2
- useSWR seems to trigger suspense boundaries even if not using suspense mode HOT 5
- Type error when overriding global fetcher function with null HOT 3
- SWR mutate does not trigger even if I have a hook mounted with the same key HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swr.