ApiaryActive
Try: pause · settings · learn · wipe
← Community / Reading Room
OU
ui-polish · 2 min read

optimistic ui updates

======================

======================

Optimistic UI updates are a design pattern that assumes the user's actions will succeed and renders the updated interface immediately, only to reconcile if the server-side operation fails.

Why Optimistic UI?

Optimistic UI updates improve the user experience by making the application feel instant. By rendering the updated interface immediately, users can see the result of their actions without having to wait for a round trip to the server.

How it Works

The optimistic UI pattern works as follows:

  1. Assume success: When the user initiates an action (e.g., submitting a form), assume that the operation will succeed.
  2. Render immediately: Render the updated interface immediately, without waiting for the server-side operation to complete.
  3. Reconcile if fails: If the server-side operation fails, reconcile the client-side state by reverting any changes made during the optimistic update.

Code Example: Optimistic Form Submission

class MyForm extends React.Component {
  handleSubmit = (event) => {
    event.preventDefault();
    this.props.submitForm(this.state);
  };

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        {/* form fields */}
        <button type="submit">Submit</button>
      </form>
    );
  }
}

In this example, we assume the submitForm function will succeed and render the updated interface immediately. If the server-side operation fails, we'll reconcile the client-side state by reverting any changes made during the optimistic update.

CSS Example: Loading Indicator

.loading {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: none;
}

/* Show loading indicator when form is submitting */
.form-submitting .loading {
  display: block;
}

In this example, we use CSS to show a loading indicator only when the form is submitting. This gives the user feedback that an action is in progress.

Back Button Everywhere

To ensure users can always navigate back to their previous state, make sure to include a back button on every page. For example:

class MyPage extends React.Component {
  render() {
    return (
      <div>
        {/* page content */}
        <button className="back-button" onClick={this.props.goBack}>
          Back
        </button>
      </div>
    );
  }
}

No Dead Ends

To prevent dead ends, make sure to include a back button on every page and provide users with clear navigation.

Every Form Submits

To ensure that every form submits, use the onSubmit event to handle form submissions. For example:

class MyForm extends React.Component {
  handleSubmit = (event) => {
    event.preventDefault();
    this.props.submitForm(this.state);
  };

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        {/* form fields */}
        <button type="submit">Submit</button>
      </form>
    );
  }
}

No 404s

To prevent 404 errors, use a client-side router that provides clear navigation and prevents dead ends.

By implementing optimistic UI updates, you can make your application feel instant and provide users with a seamless experience. Remember to include back buttons everywhere, ensure every form submits, and prevent dead ends and 404 errors.

Frequently asked
What is optimistic ui updates about?
======================
Why Optimistic UI?
Optimistic UI updates improve the user experience by making the application feel instant. By rendering the updated interface immediately, users can see the result of their actions without having to wait for a round trip to the server.
What should you know about how it Works?
The optimistic UI pattern works as follows:
What should you know about code Example: Optimistic Form Submission?
In this example, we assume the submitForm function will succeed and render the updated interface immediately. If the server-side operation fails, we'll reconcile the client-side state by reverting any changes made during the optimistic update.
What should you know about cSS Example: Loading Indicator?
In this example, we use CSS to show a loading indicator only when the form is submitting. This gives the user feedback that an action is in progress.
References & sources
  1. Apiary Reading RoomOpen, cited knowledge base — funded to keep bee & practical research free.
From the Apiary Reading Room. Opinion & editorial — not financial advice. We don't overclaim.
More from the Reading Room