61 lines
1.3 KiB
JavaScript
61 lines
1.3 KiB
JavaScript
import React from 'react'
|
|
|
|
const BaseContext = React.createContext({ base: 'Context' })
|
|
|
|
/**
|
|
* Component : BaseContextProvider
|
|
*
|
|
* @author sl
|
|
* @time 13/2/20
|
|
* @param {{}}
|
|
* @constructor
|
|
*
|
|
*/
|
|
class BaseContextProvider extends React.Component {
|
|
getContextReturnValue() {
|
|
return {}
|
|
}
|
|
|
|
getContext() {
|
|
return BaseContext
|
|
|
|
throw new Error('Please Implement Context')
|
|
}
|
|
|
|
render() {
|
|
const contextReturn = this.getContextReturnValue()
|
|
const Context = this.getContext()
|
|
const { children } = this.props
|
|
|
|
//
|
|
return <Context.Provider value={contextReturn}>{children}</Context.Provider>
|
|
}
|
|
}
|
|
|
|
export const baseContextWrap = (Provider) => {
|
|
return (Component) => (props) => <Provider children={<Component {...props} />} />
|
|
}
|
|
|
|
export function baseUseContext(context) {
|
|
return function() {
|
|
return React.useContext(context)
|
|
}
|
|
}
|
|
|
|
export function baseWithContext(context, contextPassPropKey) {
|
|
const Consumer = context.Consumer
|
|
return (Component) => (props) => (
|
|
<Consumer>
|
|
{(contextValue) => (
|
|
<Component {...{ ...props, [contextPassPropKey]: contextValue }} />
|
|
)}
|
|
</Consumer>
|
|
)
|
|
}
|
|
|
|
BaseContextProvider.propTypes = {}
|
|
|
|
BaseContextProvider.defaultProps = {}
|
|
|
|
export default BaseContextProvider
|