This repository has been archived on 2020-07-23. You can view files and clone it, but cannot push or open issues or pull requests.
BaseContextProvider/src/baseContextProvider.js
2020-06-03 13:06:30 +07:00

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