Componentes con estilo usando contexto en React
Quiero usar el contexto normal de React con styled-components. Soy consciente de los proveedores de temas genéricos en styled-components, sin embargo, sería mucho mejor si pudiera hacer esto usando React.useContext(). ¿Sabes si es posible? Intenté algo como esto.
useConfig
export function useConfig() {
const configCtx = useContext
return configCtx
}
styled.ts de ejemplo
import { useConfig } from ‘state’
import styled from ‘styled-components’
const { background_color } = useConfig()
export const VisualSearchWrapper = styled.maincolor: black;
background-color: ${background_color};
Agradecería cualquier ayuda.
Una actualización más:
En el ejemplo ocurrió este problema:
Uncaught TypeError: Cannot read properties of undefined (reading ‘context’)
El ConfigContextProvider se encuentra a continuación
import { createContext } from ‘preact’
import { FC } from ‘preact/compat’
import { useContext, useEffect, useState } from ‘preact/hooks’
export interface ConfigProfile {
background_color: string
}
interface ConfigFunctions {
updateConfigState: (updatedConfig: ConfigProfile) => void
}
type ConfigContextShape = ConfigProfile & ConfigFunctions
export const ConfigContext = createContext
export const ConfigContextProvider: FC = ({ children }) => {
const [localState, setLocalState] = useState
background_color: ”,
})
function updateConfigState(updatedConfig: ConfigProfile) {
setLocalState({ …localState, …updatedConfig })
}
const ctxValue: ConfigContextShape = {
background_color: localState?.background_color ?? ”,
updateConfigState
}
return <configcontext.provider value=”{ctxValue}”>{children}</configcontext.provider>
}
export function useConfig() {
const configCtx = useContext
if (configCtx === undefined) {
throw new Error(‘useConfig debe ser utilizado dentro de un ConfigProvider’)
}
return configCtx
}
davy.ai
Sí, es posible utilizar el contexto de React con styled-components. El código que proporcionaste va en la dirección correcta, pero hay algunas cosas que debes tener en cuenta.
En primer lugar, el gancho
useContext
debe ser utilizado dentro de un componente o un gancho personalizado, no en el ámbito de un módulo. En tu ejemplo, el ganchouseConfig
debería ser utilizado dentro del componente que renderizaVisualSearchWrapper
.En segundo lugar, debes asegurarte de que el proveedor
ConfigContext
envuelva al componente que utiliza el ganchouseConfig
. En tu código, debes asegurarte de queConfigContextProvider
envuelve al componente que utilizauseConfig
.Por último, el mensaje de error que estás viendo sugiere que el
ConfigContext
no está definido donde estás tratando de utilizarlo. Asegúrate de que elConfigContext
esté importado correctamente y de queConfigContextProvider
esté renderizando el árbol de componentes que utilizauseConfig
.Aquí tienes un ejemplo de cómo puedes utilizar
useContext
constyled-components
:En este ejemplo,
VisualSearchWrapper
utiliza el objetotheme
proporcionado por elThemeProvider
para establecer el color de fondo. Estamos utilizando el ganchouseContext
para acceder al objeto de configuración proporcionado porConfigContextProvider
.Dentro del componente
App
, estamos envolviendoVisualSearchWrapper
conConfigContextProvider
y pasando un valor con una propiedadbackgroundColor
. Este valor es luego utilizado por el ganchouseContext
dentro deVisualSearchWrapper
.Es importante tener en cuenta que el gancho
useContext
debe ser utilizado dentro de un componente o un gancho personalizado, no en el ámbito de un módulo. Además, asegúrate de que el componente proveedor envuelva el árbol de componentes donde se necesita el contexto.