Context is always empty object in React












1














I'm trying to add themes to react-native application and somehow it just doesn't work. Help please.

I have an Context:



import * as React from 'react';

export const VBContext = React.createContext({});

export default VBContext;


Then I have a custom provider which I use:



import * as React from 'react';
import { VBContext } from './Context';

class Vbcrider extends React.Component<any, any> {
constructor(props) {
super(props)

const { style } = props

this.state = {
style
}
}

render() {
const { children } = this.props;

const Context = VBContext;

return (
<Context.Provider value={this.state.style}>
{children}
</Context.Provider>
);
}
}

export default Vbcrider;


I also have a HOC, which should give this context to other components:



import * as React from 'react';
import { VBContext } from './Context';

function withStyle(WrappedComponent) {
return class extends React.Component<any, any> {
render() {
const Context = VBContext;

return (
<Context.Consumer>
{
() => <WrappedComponent {...this.props} />
}
</Context.Consumer>
);
}
};
}

export default withStyle;


And a button, where I use a HOC mentioned above:



@withStyle
class Button extends React.Component<any, any> {
style () {
const {
type,
theme
} = this.props;

return {
//some logic based on theme
}
}

render () {
const {
onPress,
children
} = this.props;

return (
<TouchableOpacity style={this.style()} onPress={() => onPress}>
{children}
</TouchableOpacity>
)
}
}


But in button and in HOC context is just empty object. Can't understand why. Any help is appreciated.



<Vbcrider style={{
primaryBackgroundColor: '#0000FF',
primaryBorderColor: '#0000CF',
warningBackgroundColor: '#FFA500',
warningBorderColor: '#FF8C00'
}}>
<App
rootReducers={rootReducers}
initialState={{}}
Navigator={RootPageNavigator}
/>
</Vbcrider>









share|improve this question
























  • empty object - is it really an object, i.e. {}? If it is empty, why do you expect that it shouldn't? How do you use Vbcrider? It's not evident that Button has Vbcrider as a parent. Please, provide stackoverflow.com/help/mcve that can replicate the problem.
    – estus
    Nov 19 '18 at 20:30












  • @estus it actually does, I updated an question
    – Leo Odishvili
    Nov 19 '18 at 20:35
















1














I'm trying to add themes to react-native application and somehow it just doesn't work. Help please.

I have an Context:



import * as React from 'react';

export const VBContext = React.createContext({});

export default VBContext;


Then I have a custom provider which I use:



import * as React from 'react';
import { VBContext } from './Context';

class Vbcrider extends React.Component<any, any> {
constructor(props) {
super(props)

const { style } = props

this.state = {
style
}
}

render() {
const { children } = this.props;

const Context = VBContext;

return (
<Context.Provider value={this.state.style}>
{children}
</Context.Provider>
);
}
}

export default Vbcrider;


I also have a HOC, which should give this context to other components:



import * as React from 'react';
import { VBContext } from './Context';

function withStyle(WrappedComponent) {
return class extends React.Component<any, any> {
render() {
const Context = VBContext;

return (
<Context.Consumer>
{
() => <WrappedComponent {...this.props} />
}
</Context.Consumer>
);
}
};
}

export default withStyle;


And a button, where I use a HOC mentioned above:



@withStyle
class Button extends React.Component<any, any> {
style () {
const {
type,
theme
} = this.props;

return {
//some logic based on theme
}
}

render () {
const {
onPress,
children
} = this.props;

return (
<TouchableOpacity style={this.style()} onPress={() => onPress}>
{children}
</TouchableOpacity>
)
}
}


But in button and in HOC context is just empty object. Can't understand why. Any help is appreciated.



<Vbcrider style={{
primaryBackgroundColor: '#0000FF',
primaryBorderColor: '#0000CF',
warningBackgroundColor: '#FFA500',
warningBorderColor: '#FF8C00'
}}>
<App
rootReducers={rootReducers}
initialState={{}}
Navigator={RootPageNavigator}
/>
</Vbcrider>









share|improve this question
























  • empty object - is it really an object, i.e. {}? If it is empty, why do you expect that it shouldn't? How do you use Vbcrider? It's not evident that Button has Vbcrider as a parent. Please, provide stackoverflow.com/help/mcve that can replicate the problem.
    – estus
    Nov 19 '18 at 20:30












  • @estus it actually does, I updated an question
    – Leo Odishvili
    Nov 19 '18 at 20:35














1












1








1







I'm trying to add themes to react-native application and somehow it just doesn't work. Help please.

I have an Context:



import * as React from 'react';

export const VBContext = React.createContext({});

export default VBContext;


Then I have a custom provider which I use:



import * as React from 'react';
import { VBContext } from './Context';

class Vbcrider extends React.Component<any, any> {
constructor(props) {
super(props)

const { style } = props

this.state = {
style
}
}

render() {
const { children } = this.props;

const Context = VBContext;

return (
<Context.Provider value={this.state.style}>
{children}
</Context.Provider>
);
}
}

export default Vbcrider;


I also have a HOC, which should give this context to other components:



import * as React from 'react';
import { VBContext } from './Context';

function withStyle(WrappedComponent) {
return class extends React.Component<any, any> {
render() {
const Context = VBContext;

return (
<Context.Consumer>
{
() => <WrappedComponent {...this.props} />
}
</Context.Consumer>
);
}
};
}

export default withStyle;


And a button, where I use a HOC mentioned above:



@withStyle
class Button extends React.Component<any, any> {
style () {
const {
type,
theme
} = this.props;

return {
//some logic based on theme
}
}

render () {
const {
onPress,
children
} = this.props;

return (
<TouchableOpacity style={this.style()} onPress={() => onPress}>
{children}
</TouchableOpacity>
)
}
}


But in button and in HOC context is just empty object. Can't understand why. Any help is appreciated.



<Vbcrider style={{
primaryBackgroundColor: '#0000FF',
primaryBorderColor: '#0000CF',
warningBackgroundColor: '#FFA500',
warningBorderColor: '#FF8C00'
}}>
<App
rootReducers={rootReducers}
initialState={{}}
Navigator={RootPageNavigator}
/>
</Vbcrider>









share|improve this question















I'm trying to add themes to react-native application and somehow it just doesn't work. Help please.

I have an Context:



import * as React from 'react';

export const VBContext = React.createContext({});

export default VBContext;


Then I have a custom provider which I use:



import * as React from 'react';
import { VBContext } from './Context';

class Vbcrider extends React.Component<any, any> {
constructor(props) {
super(props)

const { style } = props

this.state = {
style
}
}

render() {
const { children } = this.props;

const Context = VBContext;

return (
<Context.Provider value={this.state.style}>
{children}
</Context.Provider>
);
}
}

export default Vbcrider;


I also have a HOC, which should give this context to other components:



import * as React from 'react';
import { VBContext } from './Context';

function withStyle(WrappedComponent) {
return class extends React.Component<any, any> {
render() {
const Context = VBContext;

return (
<Context.Consumer>
{
() => <WrappedComponent {...this.props} />
}
</Context.Consumer>
);
}
};
}

export default withStyle;


And a button, where I use a HOC mentioned above:



@withStyle
class Button extends React.Component<any, any> {
style () {
const {
type,
theme
} = this.props;

return {
//some logic based on theme
}
}

render () {
const {
onPress,
children
} = this.props;

return (
<TouchableOpacity style={this.style()} onPress={() => onPress}>
{children}
</TouchableOpacity>
)
}
}


But in button and in HOC context is just empty object. Can't understand why. Any help is appreciated.



<Vbcrider style={{
primaryBackgroundColor: '#0000FF',
primaryBorderColor: '#0000CF',
warningBackgroundColor: '#FFA500',
warningBorderColor: '#FF8C00'
}}>
<App
rootReducers={rootReducers}
initialState={{}}
Navigator={RootPageNavigator}
/>
</Vbcrider>






reactjs react-native






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 19 '18 at 20:35







Leo Odishvili

















asked Nov 19 '18 at 19:58









Leo OdishviliLeo Odishvili

384213




384213












  • empty object - is it really an object, i.e. {}? If it is empty, why do you expect that it shouldn't? How do you use Vbcrider? It's not evident that Button has Vbcrider as a parent. Please, provide stackoverflow.com/help/mcve that can replicate the problem.
    – estus
    Nov 19 '18 at 20:30












  • @estus it actually does, I updated an question
    – Leo Odishvili
    Nov 19 '18 at 20:35


















  • empty object - is it really an object, i.e. {}? If it is empty, why do you expect that it shouldn't? How do you use Vbcrider? It's not evident that Button has Vbcrider as a parent. Please, provide stackoverflow.com/help/mcve that can replicate the problem.
    – estus
    Nov 19 '18 at 20:30












  • @estus it actually does, I updated an question
    – Leo Odishvili
    Nov 19 '18 at 20:35
















empty object - is it really an object, i.e. {}? If it is empty, why do you expect that it shouldn't? How do you use Vbcrider? It's not evident that Button has Vbcrider as a parent. Please, provide stackoverflow.com/help/mcve that can replicate the problem.
– estus
Nov 19 '18 at 20:30






empty object - is it really an object, i.e. {}? If it is empty, why do you expect that it shouldn't? How do you use Vbcrider? It's not evident that Button has Vbcrider as a parent. Please, provide stackoverflow.com/help/mcve that can replicate the problem.
– estus
Nov 19 '18 at 20:30














@estus it actually does, I updated an question
– Leo Odishvili
Nov 19 '18 at 20:35




@estus it actually does, I updated an question
– Leo Odishvili
Nov 19 '18 at 20:35












1 Answer
1






active

oldest

votes


















2














Try this way:



function withStyle(WrappedComponent) {
return class extends React.Component<any, any> {
render() {
const Context = VBContext;

return (
<Context.Consumer>
{
(value) => <WrappedComponent {...this.props} theme={value} />
}
</Context.Consumer>
);
}
};
}





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381781%2fcontext-is-always-empty-object-in-react%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    Try this way:



    function withStyle(WrappedComponent) {
    return class extends React.Component<any, any> {
    render() {
    const Context = VBContext;

    return (
    <Context.Consumer>
    {
    (value) => <WrappedComponent {...this.props} theme={value} />
    }
    </Context.Consumer>
    );
    }
    };
    }





    share|improve this answer


























      2














      Try this way:



      function withStyle(WrappedComponent) {
      return class extends React.Component<any, any> {
      render() {
      const Context = VBContext;

      return (
      <Context.Consumer>
      {
      (value) => <WrappedComponent {...this.props} theme={value} />
      }
      </Context.Consumer>
      );
      }
      };
      }





      share|improve this answer
























        2












        2








        2






        Try this way:



        function withStyle(WrappedComponent) {
        return class extends React.Component<any, any> {
        render() {
        const Context = VBContext;

        return (
        <Context.Consumer>
        {
        (value) => <WrappedComponent {...this.props} theme={value} />
        }
        </Context.Consumer>
        );
        }
        };
        }





        share|improve this answer












        Try this way:



        function withStyle(WrappedComponent) {
        return class extends React.Component<any, any> {
        render() {
        const Context = VBContext;

        return (
        <Context.Consumer>
        {
        (value) => <WrappedComponent {...this.props} theme={value} />
        }
        </Context.Consumer>
        );
        }
        };
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 19 '18 at 20:39









        karaxunakaraxuna

        21.1k965102




        21.1k965102






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381781%2fcontext-is-always-empty-object-in-react%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            Npm cannot find a required file even through it is in the searched directory