non-persisting state between function calls in React.js











up vote
0
down vote

favorite












Generally, I am trying to load some data when component loads (in initialiseSellerData() ) but I only want to do this once, i.e. if page is refreshed it doesn't do it again. Please see attempt below and description of specific problem beneath



class Index extends React.Component {
constructor(props) {
super(props);

this.state = {
initialised: false
};
}

componentDidMount = () =>
{
this.initialised()
if(this.state.initialised == false)
{
this.initialiseSellerData();
}
}


initialiseSellerData = async () =>
{
// this function makes a call to contract to initialise data
}

initialised = async () =>
{
const {sellContract } = this.props
const response = await sellContract.methods.initialised().call()
if(response == true)
{
this.setState({initialised: true})
}
}


The problem I am having is that in componentDidMount, initialised() function is called correctly and initialises state gets set to true however then when do I the check for initialised it returns false (should return true). Why isn't my state persisting / being passed between function calls.










share|improve this question




























    up vote
    0
    down vote

    favorite












    Generally, I am trying to load some data when component loads (in initialiseSellerData() ) but I only want to do this once, i.e. if page is refreshed it doesn't do it again. Please see attempt below and description of specific problem beneath



    class Index extends React.Component {
    constructor(props) {
    super(props);

    this.state = {
    initialised: false
    };
    }

    componentDidMount = () =>
    {
    this.initialised()
    if(this.state.initialised == false)
    {
    this.initialiseSellerData();
    }
    }


    initialiseSellerData = async () =>
    {
    // this function makes a call to contract to initialise data
    }

    initialised = async () =>
    {
    const {sellContract } = this.props
    const response = await sellContract.methods.initialised().call()
    if(response == true)
    {
    this.setState({initialised: true})
    }
    }


    The problem I am having is that in componentDidMount, initialised() function is called correctly and initialises state gets set to true however then when do I the check for initialised it returns false (should return true). Why isn't my state persisting / being passed between function calls.










    share|improve this question


























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      Generally, I am trying to load some data when component loads (in initialiseSellerData() ) but I only want to do this once, i.e. if page is refreshed it doesn't do it again. Please see attempt below and description of specific problem beneath



      class Index extends React.Component {
      constructor(props) {
      super(props);

      this.state = {
      initialised: false
      };
      }

      componentDidMount = () =>
      {
      this.initialised()
      if(this.state.initialised == false)
      {
      this.initialiseSellerData();
      }
      }


      initialiseSellerData = async () =>
      {
      // this function makes a call to contract to initialise data
      }

      initialised = async () =>
      {
      const {sellContract } = this.props
      const response = await sellContract.methods.initialised().call()
      if(response == true)
      {
      this.setState({initialised: true})
      }
      }


      The problem I am having is that in componentDidMount, initialised() function is called correctly and initialises state gets set to true however then when do I the check for initialised it returns false (should return true). Why isn't my state persisting / being passed between function calls.










      share|improve this question















      Generally, I am trying to load some data when component loads (in initialiseSellerData() ) but I only want to do this once, i.e. if page is refreshed it doesn't do it again. Please see attempt below and description of specific problem beneath



      class Index extends React.Component {
      constructor(props) {
      super(props);

      this.state = {
      initialised: false
      };
      }

      componentDidMount = () =>
      {
      this.initialised()
      if(this.state.initialised == false)
      {
      this.initialiseSellerData();
      }
      }


      initialiseSellerData = async () =>
      {
      // this function makes a call to contract to initialise data
      }

      initialised = async () =>
      {
      const {sellContract } = this.props
      const response = await sellContract.methods.initialised().call()
      if(response == true)
      {
      this.setState({initialised: true})
      }
      }


      The problem I am having is that in componentDidMount, initialised() function is called correctly and initialises state gets set to true however then when do I the check for initialised it returns false (should return true). Why isn't my state persisting / being passed between function calls.







      reactjs ethereum






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 11 at 13:58

























      asked Nov 11 at 13:52









      Chris Johnston

      124




      124
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote



          accepted










          I think you forgot to use await. initialised is an async function. so the calling function should use await or then to handle the promise.



          componentDidMount = async () => 
          {
          await this.initialised()
          }


          initialiseSellerData = async () =>
          {
          // this function makes a call to contract to initialise data
          }

          initialised = async () =>
          {
          const {sellContract } = this.props
          const response = await sellContract.methods.initialised().call()
          if(response == true)
          {
          await initialiseSellerData();
          this.setState({initialised: true});
          }
          }





          share|improve this answer























          • and even then it may not working since setState call inside is not guaranteed to be sync
            – skyboyer
            Nov 11 at 14:08










          • worked for me, thanks @KitKarson
            – Chris Johnston
            Nov 11 at 14:15











          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',
          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%2f53249423%2fnon-persisting-state-between-function-calls-in-react-js%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








          up vote
          0
          down vote



          accepted










          I think you forgot to use await. initialised is an async function. so the calling function should use await or then to handle the promise.



          componentDidMount = async () => 
          {
          await this.initialised()
          }


          initialiseSellerData = async () =>
          {
          // this function makes a call to contract to initialise data
          }

          initialised = async () =>
          {
          const {sellContract } = this.props
          const response = await sellContract.methods.initialised().call()
          if(response == true)
          {
          await initialiseSellerData();
          this.setState({initialised: true});
          }
          }





          share|improve this answer























          • and even then it may not working since setState call inside is not guaranteed to be sync
            – skyboyer
            Nov 11 at 14:08










          • worked for me, thanks @KitKarson
            – Chris Johnston
            Nov 11 at 14:15















          up vote
          0
          down vote



          accepted










          I think you forgot to use await. initialised is an async function. so the calling function should use await or then to handle the promise.



          componentDidMount = async () => 
          {
          await this.initialised()
          }


          initialiseSellerData = async () =>
          {
          // this function makes a call to contract to initialise data
          }

          initialised = async () =>
          {
          const {sellContract } = this.props
          const response = await sellContract.methods.initialised().call()
          if(response == true)
          {
          await initialiseSellerData();
          this.setState({initialised: true});
          }
          }





          share|improve this answer























          • and even then it may not working since setState call inside is not guaranteed to be sync
            – skyboyer
            Nov 11 at 14:08










          • worked for me, thanks @KitKarson
            – Chris Johnston
            Nov 11 at 14:15













          up vote
          0
          down vote



          accepted







          up vote
          0
          down vote



          accepted






          I think you forgot to use await. initialised is an async function. so the calling function should use await or then to handle the promise.



          componentDidMount = async () => 
          {
          await this.initialised()
          }


          initialiseSellerData = async () =>
          {
          // this function makes a call to contract to initialise data
          }

          initialised = async () =>
          {
          const {sellContract } = this.props
          const response = await sellContract.methods.initialised().call()
          if(response == true)
          {
          await initialiseSellerData();
          this.setState({initialised: true});
          }
          }





          share|improve this answer














          I think you forgot to use await. initialised is an async function. so the calling function should use await or then to handle the promise.



          componentDidMount = async () => 
          {
          await this.initialised()
          }


          initialiseSellerData = async () =>
          {
          // this function makes a call to contract to initialise data
          }

          initialised = async () =>
          {
          const {sellContract } = this.props
          const response = await sellContract.methods.initialised().call()
          if(response == true)
          {
          await initialiseSellerData();
          this.setState({initialised: true});
          }
          }






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 11 at 14:15

























          answered Nov 11 at 14:03









          KitKarson

          83821535




          83821535












          • and even then it may not working since setState call inside is not guaranteed to be sync
            – skyboyer
            Nov 11 at 14:08










          • worked for me, thanks @KitKarson
            – Chris Johnston
            Nov 11 at 14:15


















          • and even then it may not working since setState call inside is not guaranteed to be sync
            – skyboyer
            Nov 11 at 14:08










          • worked for me, thanks @KitKarson
            – Chris Johnston
            Nov 11 at 14:15
















          and even then it may not working since setState call inside is not guaranteed to be sync
          – skyboyer
          Nov 11 at 14:08




          and even then it may not working since setState call inside is not guaranteed to be sync
          – skyboyer
          Nov 11 at 14:08












          worked for me, thanks @KitKarson
          – Chris Johnston
          Nov 11 at 14:15




          worked for me, thanks @KitKarson
          – Chris Johnston
          Nov 11 at 14:15


















          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.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • 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%2f53249423%2fnon-persisting-state-between-function-calls-in-react-js%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

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma