【发布时间】:2019-07-12 12:22:10
【问题描述】:
我很难理解使用 react Context API 的新方法。 我有一个带有自定义类 Firebase 的应用程序。现在我想做一个钩子来传递它。在我使用HOC (higher-order Component) 和上下文之前。
我的问题
- 我是否需要使用 HOC 或者这是一种新方法?
- 我需要 Context.Provider 还是新的 Hook?
- 我是否需要将默认值声明为 null 或者我可以传递我的对象 直接来自 context.js
- 如何在我的代码中使用新的 Hook 而不是 HOC?
这是我的代码,其中包含一些与问题相关的 cmets
// context.js this is my hoc
// index.jsx
import App from './App'
import Firebase, { FirebaseContext } from './components/Firebase'
const FirebaseContext = React.createContext(null)
export const withFirebase = Component => (props) => {
// I don't need to wrap it to the FirebaseContext.Consumer
// 1 But do I need this HOC or it's a new way?
const firebase = useContext(FirebaseContext)
return <Component {...props} firebase={firebase} />
}
ReactDOM.render(
// 2 Here I'm lost. Do I need the FirebaseContext.Provider or not?
// 3 Do I need to declare value her or I should do it in context.js as a default?
<FirebaseContext.Provider value={new Firebase()}>
<App />
</FirebaseContext.Provider>,
document.getElementById('root'),
)
// App.jsx
// 4 Can I use a new Hook instead of HOC here and how?
import { withFirebase } from './components/Firebase/context'
const App = () => {
const firebase = this.props.firebase // But should be useContext(FirebaseContext) or something like this?
return(...)
}
export default withFirebase(App) // I don't need this with the Hook
任何帮助表示赞赏。
【问题讨论】:
-
堆栈溢出不是一个教程网站。我建议为您的每个问题设置一个新问题。尝试解决问题,如果您遇到困难,我们可以提供帮助。
-
看起来你想要一个初学者使用上下文挂钩的介绍,为此我推荐 Dave Ceddia 的 https://daveceddia.com/usecontext-hook/
-
useContext只是Context.Consumer或myClass.contextType的替代品。使用该变量并将上下文引用作为默认值传递给它。 -
@JoshPittman 我已经看过本教程(以及更多),但仍然有这些问题。我认为将所有内容放在一起很好,因为我使用了我所描述的上下文(它有效)并且想展示我不确定如何使用它的地方。
-
@KenoClayton 这对我来说很清楚。但是我需要将 App 包装到 Provider 吗?
标签: javascript reactjs react-hooks react-context