#Receiving `Cannot read properties of undefined (reading 'context')` error with Material UI

1 messages · Page 1 of 1 (latest)

gentle garnet
#

When I attempt to import Material UI into a Preact tsx file I'm receiving a Cannot read properties of undefined (reading 'context') from exports.useContext in preact/hooks. I have Preact/compat aliasing react in my project.

zinc shoreBOT
#

Hi @gentle garnet. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:

#

Hmm, I don't know enough to give you a confident answer yet. However, based on the information provided, it seems like you might be encountering a compatibility issue between Preact and Material UI.

In Astro, you can enable preact/compat, Preact’s compatibility layer for rendering React components without needing to install or ship React’s larger libraries to your users’ web browsers. This is done by passing an object to the Preact integration and setting compat: true in your astro.config.mjs file. Here's an example:

import { defineConfig } from 'astro/config';
import preact from '@astrojs/preact';

export default defineConfig({
 integrations: [
 preact({ compat: true
 })
 ],
});

When importing React component libraries, in order to swap out the react and react-dom dependencies as preact/compat, you can use overrides to do so.

// package.json
{
 "overrides": {
 "react": "npm:@preact/compat@latest",
 "react-dom": "npm:@preact/compat@latest"
 }
}

If an error happens during build-time, try adding the library to vite.ssr.noExternal: ['the-react-library'] in your astro.config.mjs file.

For more detailed help, you can check out the #support channel on Discord (https://astro.build/chat) or refer to the Astro Integration Documentation (https://docs.astro.build/en/guides/integrations-guide/).

Sources:


Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@gentle garnet kapa.ai is still learning and improving, please let us how it did by reacting below

gentle garnet
#

@zinc shore I already have the react and react-dom overrides in my code. The library that I'm having issues with is the preact/hooks library when @mui/material is trying to access useContext it seems to not be exporting from the library.

Could you happen to know why that might be happening?

zinc shoreBOT
#

Let me check the knowledge base for you. One moment! :books:

#

I'm sorry, but the information provided in the extracts does not contain specific details about the issue you're encountering with the preact/hooks library and @mui/material.

However, it's worth noting that when using multiple JSX frameworks in the same project, each framework requires different, sometimes conflicting, settings inside tsconfig.json. If you're using TypeScript, you might need to set the jsxImportSource setting to react, preact, or solid-js depending on your most-used framework. Then, use a pragma comment inside any conflicting file from a different framework.

For example, if your default setting of jsxImportSource is react, you would use:

// For Preact
/** @jsxImportSource preact */

// For Solid
/** @jsxImportSource solid-js */

For more specific help, I would recommend reaching out to the Astro community on their Discord (https://astro.build/chat) channel or submitting an issue on their GitHub (https://github.com/withastro/astro/issues) page.

Sources:


Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@gentle garnet kapa.ai is still learning and improving, please let us how it did by reacting below

gentle garnet
#

@zinc shore I'm receiving this error output

  Stacktrace:
TypeError: Cannot read properties of undefined (reading 'context')
    at exports.useContext

When using Typography from import Typography from '@mui/material/Typography' in a preact TSX file.

I have compate:true set in my integrations already, and I have react and react-dom overrides set in my package.json.

Do you know of a way to make it so that @mui/material has access to useContext from the preact/hooks package via a config?

zinc shoreBOT
#

Let me check the knowledge base for you. One moment! :books:

#

Based on the information provided in the extracts, it seems like you're encountering a compatibility issue between Preact and Material UI.

In Astro, you can enable preact/compat, Preact’s compatibility layer for rendering React components without needing to install or ship React’s larger libraries to your users’ web browsers. This is done by passing an object to the Preact integration and setting compat: true in your astro.config.mjs file. Here's an example:

import { defineConfig } from 'astro/config';
import preact from '@astrojs/preact';

export default defineConfig({
 integrations: [
 preact({ compat: true
 })
 ],
});

When importing React component libraries, in order to swap out the react and react-dom dependencies as preact/compat, you can use overrides to do so.

// package.json
{
 "overrides": {
 "react": "npm:@preact/compat@latest",
 "react-dom": "npm:@preact/compat@latest"
 }
}

If an error happens during build-time, try adding the library to vite.ssr.noExternal: ['the-react-library'] in your astro.config.mjs file.

However, the information provided in the extracts does not contain specific details about the issue you're encountering with the preact/hooks library and @mui/material.

For more specific help, I would recommend reaching out to the Astro community on their Discord (https://astro.build/chat) channel or submitting an issue on their GitHub (https://github.com/withastro/astro/issues) page.

Sources:


Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@gentle garnet kapa.ai is still learning and improving, please let us how it did by reacting below

gentle garnet
#

@zinc shore You've already given me that information, is there more that you can tell me about compatibility issues between packages?

zinc shoreBOT
#

Let me check the knowledge base for you. One moment! :books:

#

I'm sorry for the confusion, but based on the information provided in the extracts, there isn't specific information about compatibility issues between Preact and Material UI in Astro.

However, it's worth noting that Astro is designed to work with multiple front-end frameworks, and it's possible that some libraries might have compatibility issues.

In the case of the preact/hooks library and @mui/material, it seems like there might be a compatibility issue when @mui/material tries to access useContext. This could be due to a variety of reasons, such as differences in how Preact and React handle context, or how Material UI expects to interact with context.

If you're encountering issues, it might be helpful to:

Again, I apologize for not being able to provide a more specific answer based on the provided extracts.

Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: