【问题标题】:Typescript HOC with React.createContext带有 React.createContext 的 Typescript HOC
【发布时间】:2019-07-21 22:41:20
【问题描述】:

我有这个需要翻译成 Typescript 的 .js sn-p。

import React from 'react';

const FirebaseContext = React.createContext(null)

export const withFirebase = Component => props => (
    <FirebaseContext.Consumer>
        {firebase => <Component {...props} firebase={firebase} />}
    </FirebaseContext.Consumer>
)

export default FirebaseContext

我最好的猜测是

const FirebaseContext = React.createContext(null)

export const withFirebase = (Component: React.ComponentClass) => (props: any) => (
    <FirebaseContext.Consumer>
        {firebase => <Component {...props} firebase={firebase} />}
    </FirebaseContext.Consumer>
)

但是当我尝试使用上下文时——通过传递new Firebase():

import React from 'react';
import ReactDOM from 'react-dom';

import './index.css';
import * as serviceWorker from './serviceWorker';

import App from './components/App';
import Firebase, { FirebaseContext } from './components/Firebase';

ReactDOM.render(
    <FirebaseContext.Provider value={new Firebase()}>
        <App />
    </FirebaseContext.Provider>,
    document.getElementById('root'),
);

serviceWorker.unregister()

在这种情况下——我得到Type 'Firebase' is not assignable to type 'null'.

【问题讨论】:

    标签: reactjs typescript firebase react-context


    【解决方案1】:

    您似乎没有为createContext 指定任何类型。向其添加 Firebase 类型应该可以工作

    const FirebaseContext = React.createContext<Firebase | null>(null);
    

    【讨论】:

      【解决方案2】:

      更好的是创建类型并使用 Partial 作为默认值:

      type FirebaseContextProps = {
        firebase: Firebase
        isOk: boolean
        data: string
      }
      
      const FirebaseContext= React.createContext<Partial<FirebaseContextProps>>({})
      
      <FirebaseContext.Provider value={{ firebase, isOk, data }}>
      

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 2022-11-04
        • 2020-01-06
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-08
        • 1970-01-01
        相关资源
        最近更新 更多