bem-react icon indicating copy to clipboard operation
bem-react copied to clipboard

@bem-react/di: problem with using Preact X

Open belozer opened this issue 6 years ago • 2 comments

Preact version: 10.0.1

Example:

import { Registry, withRegistry, useComponentRegistry } from '@bem-react/di'

const registry = new Registry({ id: 'my-reg'})
registry.set('Button', (props) => <button {...props} />)

const Index = () => {
    const { Button } = useComponentRegistry('my-reg')
    return(
        <div>
            <h1>Hello World</h1>
            <Button type='link'>Hello!</Button>
        </div>
    )
}

export default withRegistry(registry)(Index)

Error

Cannot read property 'my-reg' of undefined
TypeError: Cannot read property 'my-reg' of undefined
    at /home/sergey/Sandbox/nextjs-preactX/node_modules/@bem-react/di/build/di.development.js:33:54
    at Array.forEach (<anonymous>)
    at Object.children (/home/sergey/Sandbox/nextjs-preactX/node_modules/@bem-react/di/build/di.development.js:32:28)
    at Object.Consumer (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact/dist/preact.js:1:8457)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:1990)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at u (/home/sergey/Sandbox/nextjs-preactX/node_modules/preact-render-to-string/dist/index.js:1:2107)
    at render (/home/sergey/Sandbox/nextjs-preactX/node_modules/next-server/dist/server/render.js:79:16)
    at renderPage (/home/sergey/Sandbox/nextjs-preactX/node_modules/next-server/dist/server/render.js:255:20)
    at /home/sergey/Sandbox/nextjs-preactX/.next/server/static/development/pages/_document.js:437:17

See demo repository (pages/index.jsx) https://github.com/belozer/nextjs-with-bem-react-preact-bug

belozer avatar Oct 20 '19 13:10 belozer

After change file

@bem-react/di/build/di.development.js
return (React.createElement(RegistryConsumer, null, function (contextRegistries) {

to

return (React.createElement(RegistryConsumer, null, function (contextRegistries = {}) {

The problem disappeared. Maybe it's a Preact bug.

belozer avatar Oct 20 '19 13:10 belozer

Актуально ещё?

yarastqt avatar Mar 01 '20 18:03 yarastqt