Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

ReactJS How to store data from helper function in state

Understanding State in ReactJS

The first concept we should be familiar with when working with ReactJS is 'state'. In the simplest terms, state is just like your short-term memory. It's a place where we can store data that might change over time, or in response to certain events.

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = { data: "" };
  }
}

In the code snippet above, we've created a class-based component with a state object. The state object has one property, data, which is initially set to an empty string.

Fetching Data with a Helper Function

Now that we know what state is, let's imagine we have a helper function that fetches some data for us. In real-life situations, this data could be from an API, a database, or just about any other source. Here is an example of what that function might look like:

function fetchData() {
  return "Hello, World!";
}

In our example, the fetchData() function simply returns the string "Hello, World!".

Storing Helper Function Data in State

The question now is, how do we store the data returned by our helper function in our component's state? This is where the componentDidMount() lifecycle method comes in.

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = { data: "" };
  }

  componentDidMount() {
    this.setState({ data: fetchData() });
  }
}

In the code above, we've added componentDidMount() to our component. This is a special function that React calls after the component has been inserted into the DOM.

Inside componentDidMount(), we call this.setState(), a function provided by React to update the state. We pass { data: fetchData() } to this.setState(). This tells React to update the data property of the state with the result of calling fetchData().

The Role of setState()

The setState() function is crucial to understanding how state works in React. It may look like we're simply reassigning a property on an object, but setState() does a lot more than that.

Imagine you're at a party. You're having a conversation with someone and the music is low. Suddenly, the DJ cranks up the volume. You don't continue talking at the same volume, do you? No, you raise your voice, change your state, to adapt to the new environment.

Similarly, when data changes, React needs to know so it can re-render the parts of the UI related to that data. By using setState(), you're telling React, "Hey, some data has changed. You might need to do something about this."

Accessing State Data in the Render Method

Now that we have stored the data in the state, we can display it in our component's render method:

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = { data: "" };
  }

  componentDidMount() {
    this.setState({ data: fetchData() });
  }

  render() {
    return <h1>{this.state.data}</h1>;
  }
}

In the render() method, we return a <h1> element that contains {this.state.data}. This is how we access the data stored in the state.

Handling Asynchronous Data Fetching

In the real world, fetching data often takes some time. To handle this, we can use asynchronous functions and the async/await syntax.

async function fetchData() {
  // Simulate a delay with setTimeout
  return new Promise((resolve) => setTimeout(() => resolve("Hello, World!"), 2000));
}

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = { data: "" };
  }

  async componentDidMount() {
    const data = await fetchData();
    this.setState({ data });
  }

  render() {
    return <h1>{this.state.data}</h1>;
  }
}

In the example above, fetchData() now returns a Promise that resolves after 2 seconds. componentDidMount() is now marked with the async keyword, and we use the await keyword to wait for fetchData() to finish before calling this.setState().

Conclusion

In conclusion, storing data in the state of a React component might seem like a daunting task at first, especially if you're new to JavaScript or React. However, by breaking it down into smaller steps and understanding the underlying concepts, it becomes straightforward.

Remember, state is like your short-term memory, setState() is your way of letting React know that something has changed. And React, like a good DJ, knows when to drop the beat (or in this case, re-render the component).

So go ahead, give it a try! Store some data, change it, and watch your components react.