Coder Social home page Coder Social logo

Comments (8)

shuding avatar shuding commented on May 14, 2024 87

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.

shuding avatar shuding commented on May 14, 2024 17

@corysimmons you can just remove that useEffect:

const [selectOption, setSelectOption] = useState()
useSWR(`https://api.example.com/${selectOption}`)

return (
  <select>...</select>
)

from swr.

corysimmons avatar corysimmons commented on May 14, 2024 8

@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.

shuding avatar shuding commented on May 14, 2024 4

@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.

sergiodxa avatar sergiodxa commented on May 14, 2024 4

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.

corysimmons avatar corysimmons commented on May 14, 2024 3

@shuding Awesome. btw I like your Github quote and domain name. Thanks for the nice library!

from swr.

moroshko avatar moroshko commented on May 14, 2024

@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.

daviesdoclc avatar daviesdoclc commented on May 14, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.