question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Hooks: useEffect + context

See original GitHub issue

Can I use useEffect() in conjunction with useContext(). Meaning, I would like the useEffect() to rerun when the context changes.

For example:


const MyComponent = (props) => {
  const ctx = useContext(MyContext)
  
  useEffect( () => {
    //do some useful operation, when the ctx changes.
  }, [ctx])
}

Do you want to request a feature or report a bug? possibly a bug

What is the current behavior? ctx does not work with useEffect.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem. Your bug will get fixed much faster if we can run your code and it doesn’t have dependencies other than React. Paste the link to your JSFiddle (https://jsfiddle.net/Luktwrdm/) or CodeSandbox (https://codesandbox.io/s/new) example below:

What is the expected behavior?

Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React? 16.7.0-alpha.0

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Reactions:4
  • Comments:5 (1 by maintainers)

github_iconTop GitHub Comments

24reactions
arianoncommented, Nov 10, 2018

Ideally you would do this:

const MyComponent = (props) => {
  const { a, b, c, d } = useContext(MyContext)
  
  useEffect(() => {
    // Do stuff
  }, [a, b, c, d])
}

But if you really want to do what you’re doing, then this will do the job:

const MyComponent = (props) => {
  const ctx = useContext(MyContext)
  
  useEffect(() => {
    // Do stuff
  }, [...Object.values(ctx)])
}
15reactions
markeriksoncommented, Nov 11, 2018

Total nitpick: I don’t think you have to spread the result - it could just be:

useEffect( () => {

}, Object.values(ctx) )

😃

Read more comments on GitHub >

github_iconTop Results From Across the Web

Hooks API Reference
This page describes the APIs for the built-in Hooks in React. ... If you're familiar with the context API before Hooks, useContext(MyContext) is...
Read more >
React.js — Basic Hooks (useState, useEffect, & useContext)
Context is primarily used when some data needs to be accessible by many components at different nesting levels. Apply it sparingly because it ......
Read more >
How to Use Context API with Hooks While Avoiding ...
Learn how to efficiently create and consume Context API with the use of hooks ... import React, {useState, useEffect} from 'react' const ...
Read more >
A Guide to React Context and useContext() Hook
The React context provides data to components no matter how deep they are in the components hierarchy.
Read more >
React Hooks: context, state and effects | by David Flanagan
A case study that motivates and explains the use of the useContext(), useState() and useEffect() hooks in React 16.8.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found