Могу ли я использовать PropTypes, чтобы выразить, что проп - это Обещание? - PullRequest
0 голосов
/ 15 октября 2019

PropTypes полезны для отладки, потому что они показывают предупреждение, когда ожидания не оправдываются. Кроме того, они также хорошо выражают намерение о том, как должен использоваться компонент.

Если у меня есть компонент, который принимает опору со значением, которое может быть обещанием, есть ли какой-то способЯ могу выразить это с помощью PropTypes? Я представляю что-то прямое, например PropTypes.promise, или какой-то способ выразить концепцию «жизнеспособного» с использованием строительного блока PropTypes.

Вот очень упрощенный пример, демонстрирующий мой предполагаемый вариант использования:

class SomeComponent extends Component {
  static propTypes = {
    someDataPromise: PropTypes.object // <-- can I be more expressive here?
  }

  state = {
    isLoading: false
  }

  async handleSubmit() {
    this.setState({ isLoading: true });

    const data = await this.props.someDataPromise;
    const response = await fetch(`/some/api/endpoint?data=${data}`);
    // do something with the response

    this.setState({ isLoading: false });
  }

  render() { /* ... */ }
}

Ответы [ 2 ]

3 голосов
/ 15 октября 2019

Вы можете использовать объект с определенной формой, например

  PropTypes.shape({
     then: PropTypes.func.isRequired,
     catch: PropTypes.func.isRequired
  })
2 голосов
/ 15 октября 2019

Не думаю, что вы должны так реагировать. React - это не что иное, как продвинутый шаблонизатор, что означает, что у вас есть «состояние» данных и представление, представляющее это состояние. Использование обещания в качестве свойства означает, что у вас есть неопределенное состояние, которое действительно трудно представить в аспекте компонента представления. Это главная проблема программирования, вы можете делать все, что хотите, но когда вы используете фреймворк, вы должны следовать философии фреймворка.

Короче говоря, не используйте обещания как собственность. Обеспечьте допустимое детерминированное состояние, прежде чем передавать свойства компоненту представления. Может быть, такое глобальное состояние, как redux с thunk или наблюдаемыми приведениями redux, поможет вам обрабатывать асинхронную информацию.

...