I have this error:
src/index.js Line 9:36: The object passed as the value prop to the Context provider (at line 9) changes every render. To fix this consider wrapping it in a useMemo hook react/jsx-no-constructed-context-values
I am not sure how to use useMemo
in this case.
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import FirebaseContext from './context/firebase';
import { firebase, FieldValue } from './lib/firebase';
import './styles/app.css';
ReactDOM.render(
<FirebaseContext.Provider value={{ firebase, FieldValue }}>
<App />
</FirebaseContext.Provider>,
document.getElementById('root')
);
I have this error:
src/index.js Line 9:36: The object passed as the value prop to the Context provider (at line 9) changes every render. To fix this consider wrapping it in a useMemo hook react/jsx-no-constructed-context-values
I am not sure how to use useMemo
in this case.
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import FirebaseContext from './context/firebase';
import { firebase, FieldValue } from './lib/firebase';
import './styles/app.css';
ReactDOM.render(
<FirebaseContext.Provider value={{ firebase, FieldValue }}>
<App />
</FirebaseContext.Provider>,
document.getElementById('root')
);
Share
Improve this question
edited Apr 23, 2024 at 9:28
Harrison
2,35712 gold badges22 silver badges44 bronze badges
asked Feb 23, 2022 at 8:07
Alex KuzminAlex Kuzmin
1711 gold badge1 silver badge4 bronze badges
1
- did you solve it? I'm having the same issue – German Commented Sep 25, 2023 at 18:17
3 Answers
Reset to default 17I think you need to return FireBaseContext
from another component. And in that component you can do useMemo
to make ESLint happy.
Something like below (I didn't test this)
import { useMemo } from "react";
import ReactDOM from 'react-dom';
import App from './App';
import FirebaseContext from './context/firebase';
import { firebase, FieldValue } from './lib/firebase';
import './styles/app.css';
ReactDOM.render(
<FireBaseWrapper />,
document.getElementById('root')
);
const FireBaseWrapper = () => {
const fireBaseProviderValue= useMemo(() => ({ firebase, FieldValue }), [firebase, FieldValue]);
return (<FirebaseContext.Provider value={fireBaseProviderValue}>
<App />
</FirebaseContext.Provider>)
}
You can simplify it further with the following snippet:
const FireBaseWrapper = () =>
<FirebaseContext.Provider value={useMemo(() => ({ firebase, FieldValue }), [firebase, FieldValue])}>
<App />
</FirebaseContext.Provider>;
I had this same problem and didn't necessarily want to use 'useMemo'. I instead pasted this eslint command above the line in question, and it disables the eslint flag.
// eslint-disable-next-line react/jsx-no-constructed-context-values
This then allowed me to deploy without the issue.