Как задать отображение spinner до ответа от сервера reactJS?
Идеальный вариант, создать для этих задач компонент:function Block({ 
  children,
  isLoading, 
  isError, 
  isEmpty, 
  emptyText, 
  fetch,
}) {
  const showPreloader = isLoading && !isError;
  const allDataIsReady = !isLoading && !isError;
  const showEmptyText = allDataIsReady && isEmpty && emptyText;

  return (
    <Wrapper>
      {showPreloader && <Preloader />}
      {isError && <TryAgain fetch={fetch} />}
      {showEmptyText && <Empty>{emptyText}</Empty>}
      {allDataIsReady && children}
    </Wrapper>
  );
}
И использовать его в коде так:render() {
  const { isLoading, isError, orderList } = this.props;

  return (
    <Block
      isLoading={isLoading}
      isError={isError}
      isEmpty={!ordersList.length}
      fetch={this.fetchOrdersList}
      emptyText="You don't have any orders."
    >
      {ordersList.map(order => <Order key={order.id} order={order} />}
    </Block>
  )
}
Название служебных дочерних компонентов компонента Block условные, но думаю суть их задач передают.
Мое мнение такое:
1. То что спиннер почти не заметно - это нормально раз сервер быстро ответил и рендер тоже прошел нормально.
2. Насчет "скачков", отрисовки с нуля и вообще выборки фильмов - посмотрите на библиотеку reselect, попробуйте её (если еще не используете), очень помогает во многих подобных (и не только) случаях.
3. Насчет ошибки со стороны сервера - я бы добавил, это удобно, и делается не трудно.