[尝试使用组件时不是对象错误

问题描述 投票:0回答:1

我正在尝试使用Portal,但是当我用包裹时,我得到未定义不是对象错误,基本上,门户网站使您可以在应用中移动组件等,而无需再次重新渲染。这是我在应用程序中遇到的错误,但我不知道为什么!错误:TypeError:未定义不是对象(评估PortalContext> PortalContext> Provider

PortalContext.tsx

import * as React from 'react'
export default PortalContext = React.createContext({
gates: {},
teleport: (gateName: string, element: JSX.Element) => {
return
 }
})

PortalProvider.tsx

import * as React from 'react'
import { PortalContext } from './PortalContext'

interface IProps {
  children: JSX.Element
}

class PortalProvider extends React.Component<IProps> {
  public state = {
    gates: {}
  }

public render() {
const { children } = this.props
return (
  <PortalContext.Provider value={{ gates: this.state.gates, teleport: 
 this.teleport }}>
    {children}
    </PortalContext.Provider>
  )
}

 private teleport = (gateName: string, element: JSX.Element) =>
  this.setState({ gates: { ...this.state.gates, [gateName]: element } 
})
}

   export default PortalProvider

PortalGate.tsx

import * as React from 'react'
import { PortalContext } from './PortalContext'

function PortalGate(props: {
  gateName: string
  children?: (teleport: (gateName: string, element: JSX.Element) => 
void) => JSX.Element
}) {
  const { gateName, children } = props
  return (
    <PortalContext.Consumer>
      {value => {
        return (
          <React.Fragment>
            {value.gates[gateName]}
            {children && children(value.teleport)}
          </React.Fragment>
        )
      }}
    </PortalContext.Consumer>
  )
}

export default PortalGate

app.js

import * as React from 'react'
import PortalProvider from './PortalProvider'
export default class App extends React.Component{

  public render() {
    return (
      <PortalProvider>
        <App/>
      </PortalProvider>
    )
  }
}
javascript react-native
1个回答
0
投票

发生这种情况是因为您默认导出上下文并将其与命名导入一起使用。

因此,更改此行:

import { PortalContext } from './PortalContext'

至:

import PortalContext from './PortalContext'
© www.soinside.com 2019 - 2024. All rights reserved.